Come proteggerci dall'SQL Injection quando leggiamo i dati da una form.
SQL Injection
Quando leggiamo i dati da una form come quella di una login, siamo a rischio di SQL Injection.
L'SQL Injection è una procedura tramite la quale è possibile "iniettare"
del codice SQL in modo illecito.
Esempio
Vediamo un esempio concreto. Supponiamo di avere una tabella Users così fatta:
Res = Connection.Execute(SQL)
If not(Res.Eof) Then
checkUser = true
End If
Res.Close
end function
%>
Ecco che entra in gioco la SQL Injection. se come username e password inseriamo il codice: a' or 'a' = 'a ecco come viene scritta la query che legge l'utente:
select * from utenti
where
[username] ='a' or 'a'='a' and
[password]
='a' or 'a'='a'
Questo perchè il carattere ' viene interpretato da ASP come carattere di fine stringa.
A questo punto risulta chiaro che la query restituisce il recordset completo di tutti gli utenti del database (essendo la where sempre verificata) e ci fa passare...
Come evitare l'SQL Injection
Ci sono diversi metodi per evitare l'SQL Injection, io vi mostro quello più immediato, e comunque di sicuro effetto.
Quando leggiamo i valori dalla querystring, basta sostituire il carattere di ' con due caratteri '' tramite l'istruzione Replace
<%
user = Request.Form("user")
pwd = Request.Form("pwd")