Proteggersi da attacchi di SQL e code injection con ASP

di , in Classic ASP, Coding,

Già in passato (vedi script #390) ci siamo occupati di SQL injection. Ci torniamo questa volta, ampliando l'argomento, in modo da coprire anche il code injection.
SQL e code injection sono termini che stanno ad indicare l'inserimento rispettivamente di codice SQL e codice (HTML o Javascript) nelle pagine di un sito.
In genere questa tecnica si basa nel modificare il valore campi che una pagina riceve in input, per fare in modo che venga eseguito il codice che chi attacca ha preparato.
La tecnica più utilizzata è quella che permette di effettuare l'accesso in un'area riservata senza conoscere effettivamente la password dell'utente (si veda script #390).
Un primo livello di protezione consiste nell'adottare, in maniera globale all'interno dell'applicazione, la buona abitudine di sfruttare le stored procedure, se si lavora con SQL Server.
In questo modo i parameters sono immuni a questo genere di attacco.
Per tutti gli altri database, è sufficiente filtrare alcuni caratteri, sfruttando una funzione come questa:

<%

Function FixSQL(stringa)
 stringa = Replace(stringa, "'", "''")
 stringa = Replace(stringa, "%", "[%]")
 stringa = Replace(stringa, "[", "[[]")
 stringa = Replace(stringa, "]", "[]]")
 stringa = Replace(stringa, "_", "[_]")
 stringa = Replace(stringa, "#", "[#]")
 FixSQL = stringa
End function

SQL = "SELECT * FROM tabella WHERE ID = '" & FixSQL(Request("ID")) & "'"

%>

Per quanto riguarda il code injection, il 90% dei problemi si risolvere utilizzando la funzione Server.HtmlEncode, che provvede a rendere innoqui eventuali pezzi di codice inseriti nella pagina:

<%

strHTML = "<s" & "cript>alert(document.cookie);</s" & "cript>"

' code injection
Response.Write(strHTML)

' protetto
Response.Write(Server.HtmlEncode(strHTML))

%>

A video potremo vedere i cookie, frutto della prima esecuzione. Analogamente, è possibile sfruttare bug come questo per inserire, ad esempio all'interno di un forum, un'immagine nascosta che provveda a richiamare uno script che è in grado di salvare l'elenco dei cookie.
In casi come questi, se nel cookie ci fossero informazioni sensibili, come e-mail o password, l'effetto può essere molto grave.

Commenti

Visualizza/aggiungi commenti

Proteggersi da attacchi di SQL e code injection con ASP (#595) 810 41
| Condividi su: Twitter, Facebook, LinkedIn, Google+

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata

I più letti di oggi