Morpheusweb.it - Risorse per webmaster: script, ASP.NET, C#, Visual Basic .Net, tutorial, asp, javascript, css, php, html, java, ADO, VBScript, forms, frames, Active Server Pages, Dynamic HTML, database, gratis per webmaster e webdesigner

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:

Username Password
user1 pass1
user2 pass2
user3 pass3


Ecco la form per il login

<form method="post" action="login.asp">
Username: <input type="text" name="user"><br />
Password: <input type="text" name="pwd"><br /><br />
<input type="submit" value="Submit">
</form>


Autenticazione

Per leggere i parametri:

<%
user = Request.Form("user")
pwd = Request.Form("pwd")

If Not checkUser(user,pwd)
  Response.Redirect("nonautorizzato.asp")
Else
  'utente autenticato
End If

function checkUser(user,pwd)

  'connessione al database...

  checkUser = false
  SQL = ""
  SQL = SQL & "Select * from utenti "
  SQL = SQL & " where "
  SQL = SQL & "  [username]='" & user & "' and "
  SQL = SQL & "  [password]='" & pwd & "'"

  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")

'per prevenire l'sql injection
user = Replace(user,"'","''")
pwd = Replace(user,pwd,"'","''")
%>

Il resto del codice non necessita modifiche.



Stampa la pagina


 

Inizio pagina

risorse per webmaster