Visa ett inlägg
Oläst 2010-11-01, 09:01 #5
emilvs avatar
emilv emilv är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Feb 2004
Inlägg: 1 564
emilv emilv är inte uppkopplad
Bara ett inlägg till!
emilvs avatar
 
Reg.datum: Feb 2004
Inlägg: 1 564
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']); 
emilv är inte uppkopplad   Svara med citatSvara med citat