WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Simpel Fråga - SQL injections. (https://www.wn.se/forum/showthread.php?t=1044590)

xatron 2010-11-01 04:00

Simpel Fråga - SQL injections.
 
Jag har en hemsida där jag hämtar ut spelet id via "get".

Typ: game.php?id=ID'n
och då såg jag nu att någon testat skriva "id=hi' or 1=1-- " vad menar dom med det? Kan den vara skadande eller något?

Alex 2010-11-01 04:45

Yes, någon har försökt göra en sql-injection på din site.

xatron 2010-11-01 05:19

Ok och vad för sql-injection har han försökt på?

allstars 2010-11-01 08:42

finns det olika typer, menar du?

Användaren har försökt köra att den skall kunna hämta ut all data från den SQL-fråga med en förhoppning att denna skall få ut informationen.
Så om du hade gjort mer fel i din programmering kan detta innebära att användaren kunnat hämta ut hela databasen, förenklat sagt.

emilv 2010-11-01 09:01

Om du har denna SQL-fråga:

Kod:

SELECT * FROM table WHERE id = '$id'
Så skulle ovanstående göra att denna fråga körs:

Kod:

SELECT * FROM table WHERE id = 'hi' or 1=1--'
Som du redan vet betyder -- att resten av raden är en kommentar. Detta skulle då kunna lista alla oster i databasen. Ett (ofta värre) exempel är om man gör samma sak i ett inloggningsformulär med dessa uppgifter:

user: admin
pass: hi' or 1=1--

Denna SQL-fråga:

Kod:

SELECT * FROM users WHERE username = '$user' AND password = '$pass'
blir då:

Kod:

SELECT * FROM users WHERE username = 'admin' AND password = 'hi' or 1=1--'
Denna fråga kommer alltid att stämma eftersom 1=1 alltid stämmer. Man blir då inloggad som admin. Du skyddar dig mot detta genom att använda mysqli_real_escape_string på värden som ska användas i databasfrågor eller genom att använda prepared statements (PDO eller liknande).

I ditt fall kan du se till att $_GET['id'] garanterat är ett heltal med hjälp av intval. Då behöver du inte använda mysqli_real_escape_string på det värdet:

PHP-kod:

$_GET['id'] = intval($_GET['id']); 


xatron 2010-11-01 17:01

Ok bra då var jag säker mot det! :) Tack för alla svar.

KarlRoos 2010-11-04 01:14

http://xkcd.com/327/ :)

Dennis Holm 2010-11-04 01:29

Citat:

Ursprungligen postat av KarlRoos (Inlägg 20376545)

en klassiker..
dock så vill jag minnas att jag inte sett någon php bok som visar något sett alls att skydda sig emot injections.
Lite dåligt egentligen då det är där det är som viktigast.. i grunderna.

xatron 2010-11-05 03:16

^^.... kul

martin-lb 2010-11-05 20:12

Citat:

Ursprungligen postat av KarlRoos (Inlägg 20376545)

Klassiker - som blev väldigt aktuell i senaste riksdagsvalet dessutom!


Alla tider är GMT +2. Klockan är nu 00:51.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson