Tremate tremate gli hacker sono arrivati ...ovvero la SQL INJECTION

Carissimi lettori,



E' fine luglio e con questo articolo la redazione si prende un breve periodo di pausa per ricaricare le energie.

Parafrasando il titolo originale, oggi parliamo di un argomento un po diverso da solito. Approcciamo il mondo misterioso e sotterraneo degli hacker facendovi vedere una delle tecniche usate per accedere a fonti dati a cui non si avrebbe il diritto ad accedere.

Però mi raccomando! lo scrivo in maiuscolo "TRY ONLY AT HOME"!

Non provate mai ad accedere a dati di cui non avete l'autorizzazione per accedere: Per prima cosa quasi certamente vi scoprirebbero inoltre, essendo ovviamente illegale si richiano sanzioni legali.

LA SQL INJECTION


La SQL Injection è una tecnica che consiste nell'introdurre codice malevolo all'interno delle stringhe SQL. E' una delle tecniche di hacking web più comuni.

Pensate ad esempio al momento in cui un sito WEB richiede le credenziali per accedere.
Tipicamente sarà presente un campo in input dove viene richiesto di digitare il proprio utente.

Il valore che avete immesso verrà confrontato con l'elenco dei codici utente registrati sul sito.
Lato SQL verrà eseguita una stringa SQL fatta ad esempio così:

       
SELECT ID FROM UTENTI WHERE UTENTE= " + UTENTE
       

Se la Query non ritorna nulla non si avrà accesso al sito.

Ma se invece di scrivere il mio codice utente scrivessi qualcosa di diverso?
Ad esempio:

       
LUCA OR ID=ID
       

Guardate la stringa SQL eseguita.. OPS!

       
SELECT ID FROM UTENTI WHERE UTENTE='LUCA' OR ID=ID
       


La Query ritornerà sempre una riga e quindi si avrà accesso al sito.


Volendo si potrebbe anche essere più invasivi.

Se al posto di LUCA OR ID=ID imputassimo invece: LUCA OR ID=ID; DROP TABLE UTENTI.?

Lascio immaginare cosa accadrebbe ...


Va detto che, normalmente, i siti web commerciali adottano delle protezioni che impediscono un così facile accesso.

Come?

Bhe, prima di tutto, l'utente che esegue la Query di login non ha avrà i diritti per eseguire istruzioni SQL di tipo DROP TABLE, ALTER TABLE, etc etc.

Poi, come meccanismo di protezione, viene sfruttata la parametrizzazione delle Query.
Questo è infatti il trucco base!

Pensate ad una Stringa SQL così:

       
SELECT ID FROM UTENTI WHERE (UTENTE=:UTENTE) AND (PWD=:PWD)
       

Se ora nel parametro scrivete un tipo di hack visto sopra, semplicemente la Query andrebbe in errore!


Bene, per oggi è tutto!

Ci rivediamo presto!

Luca Biondi @ SQLServerPerformance blog!








Next post: SQL SERVER Express VS. SQL SERVER Standard! (perchè non scegliere la versione Express)

Previous post: Hei! chi è stato a cancellare le righe dalla mia tabella?

Comments

I Post più popolari

SQL Server, execution plan and the lazy spool (clearly explained)

SQL Server, datetime vs. datetime2

La clausola NOLOCK. Approfondiamo e facciamo chiarezza!