SQL Injection

da | Giu 2, 2009 | Sicurezza

Trattasi delle seguenti piattaforme:
• ASP.NET versione 1.1
• ASP.NET versione 2.0
• PHP
Che cos’è una SQL Injection?
La SQL injection è una tecnica dell’hacking finalizzata a colpire le applicazioni web che utilizzano un database di tipo SQL. Questa tecnica sfrutta un errore o dimenticanza del programmatore di effettuare controlli sui dati ricevuti in input per immettere del codice maligno all’interno di una query. Tramite un SQL Injection, il malintenzionato può riuscire ad autenticarsi all’interno del sito, potendo visualizzare e modificare i contenuti di quest’ultimo. Il tutto senza conoscere username e password dell’amministratore del sito web. Ovviamente, una volta riusciti ad entrare nelle aree protette del sito web, è anche possibile risalire alla password dell’amministratore..

Come proteggere le pagine ASP dagli attacchi

Fortunatamente è possibile proteggersi da questi attacchi!

Se utilizziamo un database SQL Server, sarà necessario utilizzare le stored procedure, in questo modo i parameters sono immuni a questo genere di attacco.

Se utilizziamo un altro tipo di database, per esempio: mysql.. possiamo sfruttare una funzione come questa:

<%

Function ProteggiSQL(stringa)

stringa = Replace(stringa, “[“, “[[]”);

stringa = Replace(stringa, “]”, “[]]”);

stringa = Replace(stringa, “_”, “[_]”);

stringa = Replace(stringa, “‘”, “””);

stringa = Replace(stringa, “%”, “[%]”);

stringa = Replace(stringa, “#”, “[#]”);

ProteggiSQL = stringa

End function

SQL = “SELECT * FROM tab1 WHERE ID = ‘” & ProteggiSQL(Request(“ID”)) & “‘”

%>

Questa piccola ma efficace funzione, non fa altro che variare i caratteri immessi.
Per proteggere invece la nostra pagina web dagli attacchi injection basterà utilizzare la seguente funzione Server.HtmlEncode, in questo modo non verrà riconosciuto il comando di injection nella query.

<%
strHTML = “alert(document.cookie);”

‘ stringa immessa nei form di login
Response.Write(strHTML)

‘ protezione da un eventuale code injection
Response.Write(Server.HtmlEncode(strHTML))

%>

Come proteggere le pagine PHP dagli attacchi
Anche in PHP è possibile proteggersi da attacchi Injection, tuttavia, esistono vari metodi. Lascio a voi la scelta di quale utilizzare:

<?php

function stop($data){

$hash = addslashes(strip_tags($data));

return $hash;

}

?>

Questo pezzetto di codice serve per bloccare tutti i tag html sospetti, in più bloccherà l’utilizzo di una punteggiatura pericolosa, per esempio ‘aaa”. Ovvero l’utilizzo di apici singoli e doppi.

<?php

function stop($data){

$hash = msyql_real_escape_string(strip_tags($data));

return $hash;

}

?>

Quest’altro codice, invece, è simile alla precedente, ma è molto più accurata e fidata
I due script postati sopra, devono essere utilizzati univocamente, non è possibile utilizzarli entrambi nella stessa pagina, sarebbe inutile..
Ovviamente, questi script sono elementari, quindi un malintenzionato preparato potrebbe scavalcare questa protezione..
Come verificare se il proprio sito è vulnerabile

Se si utilizza un database SQL Server, si può utilizzare l’applicativo di casa Microsoft: UrlScan filter. Questo tool, controlla il codice delle proprie pagine e segnala eventuali porzioni di codice vulnerabili.
Per tutti gli altri database è possibile utilizzare uno dei tanti tool Open Source, sul seguente sito trovate una lista dei vari tool e del linguaggio di programmazione controllato.
Lista tool: http://samate.nist.gov/index.php/Source_Code_Security_Analyzers.html

Condividi questo articolo su:

0 commenti

Invia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *