SQL injection is een algemeen begrip dat geldt voor elke database-server die samen kan werken met een andere applicatie, wat dus vrijwel elke database-server is, zowel MySQL als Access als Oracle, etc.
Beschermen hiertegen: zorgen dat men je query's niet kan beïnvloeden.
Neem deze ASP code waarin ik een query opstel:
Code:
dim query
query = "SELECT wachtwoord FROM gebruikers WHERE gebruikersnaam = '" & request.form("gebruikersnaam") & "'"
Een dergelijke query voert men uit bij loginsystemen, hierbij komt gebruikersnaam van de waarde die men invult in het loginformulier.
Stel ik zou bij het loginformulier dit invullen:
De query zou er dan als volgt uit zien:
Code:
SELECT wachtwoord FROM gebruikers WHERE gebruikersnaam = 'bla ' bla'
Zie je die ' tussen bla en bla in ? Die verstoort de query.
Pas dit trucje op de juiste manier toe en je kan idd heel wat bereiken, met de nieuwste MySQL versies nog meer dan met de oude (denk aan het UNION statement). Om dit te voorkomen gebruik je simpelweg de ASP functie
Replace() om de ' te
escapen. Toen ik voor school een project in ASP moest schrijven (met enkele anderen, uiteraard), heb ik deze functie geschreven:
Code:
function verwerkInvoer( string )
verwerkInvoer = Trim( Replace( string, "'", "''" ) )
end function
En deze functie pastte ik toen als volgt toe:
Code:
gebruikersnaam = verwerkInvoer( request.form( "gebruikersnaam" ) )
wachtwoord = verwerkInvoer( request.form( "wachtwoord" ) )
Call recordset.Open( "SELECT * FROM gebruikers WHERE gebruikersnaam = '" & gebruikersnaam & "' AND wachtwoord = '" & wachtwoord & "'", connection)
Let er wel op dat dit het simpelste van het simpelste loginsysteem is en dat dit loginsysteem verre van veilig is, maar zo heb je SQL injection al wel voorkomen
Succes !