SQL-Injection in de Where-clause
SQL-injection in de WHERE-clause:
We hebben het nu gehad over de injection in de Insert-clause, dat vaak op die manier misbruikt wordt. Nu ook even een injection op een totaal andere manier.
Stel je voor, er wordt bij een website een passwoord opgevraagd van een gebruiker door middel van een link, dit komt voor als vragen om problemen, maar schrik niet, dit komt toch nog vaak voor (op een dergelijke manier).
De php-code voor de opvraag-pagina:
Code:
2
3
4
5
$SQL = mysql_query("SELECT password_user FROM table WHERE naam_user = '{$_GET['naam_user']}'");
$data = mysql_fetch_array($SQL);
echo $data['password_user'] . " hoort bij user: " . $_GET['naam_user'];
?>
Je ziet het waarschijnlijk al gebeuren, wat als we die $_GET-waarde gaan veranderen?
We maken eens een link waarbij we meerdere gebruikers op kunnen vragen.
Voorbeeld van normale link:
Code:
<a href="lookup.php?naam_user=pietje">
Bekijk password
</a>
Stel pietje wil erachter komen wat het password van gebruiker "Sinterklaas" is, dan kan hij dat als volgt teweten komen, middels de URL te veranderen in iets als:
Nieuwe, kwaadaardige URL:
lookup.php?naam_user=pietje%27+OR+naam_user+%3D+%27sinterklaas
Wat uitkomt is een query als deze:
Kwaadaardige query:
SELECT password_user FROM table
WHERE naam_user = 'pietje' OR naam_user = 'sinterklaas'
Nu kan pietje dus het password van gebruiker "Sinterklaas" achterhalen, iets waar die gebruiker niet blij mee zal zijn. Dit is ook een van de redenen waarom passwoorden het liefst gecodeerd opgeslagen moeten worden, maar ook dit als voorbeeld.