SQL injection apare datorita neverificarii parametrilor utilizati in comenzi SQL. De exemplu sa presupunem ca avem (pagina.xxx):
- PHP:
<?php ...
mysql_query("SELECT * FROM Tabela WHERE id=".$_GET['id']);
... ?>
- ASP:
<% ...
conexiune.Execute "SELECT * FROM Tabela WHERE id=" & Request.QueryString("id")
... %>
Pentru aceste cazuri daca cineva in loc de pagina.xxx?id=1 cheama
pagina.xxx%3Fid%3D1%3BDELETE+%2A+FROM+Tabela
ceea ce inseamna
pagina.xxx?id=1;DELETE * FROM Tabela
Surpriza o sa fie de proportii.
In acest fel se pot executa si alte comenzi SQL nu doar DELETE.
Intervin citeva probleme:
- Trebuie cunoscut numele tabelelor sau cimpurilor sau gasite comenzi SQL care nu depind de numele tabelelor (folosit la modul general sau tabelele standard ale bazei de date)
- Pagina web sa nu faca nici un fel de verificari a parametrilor.
Dupa cum se poate vedea toata aceasta problema dispare daca avem:
- PHP:
<?php ...
mysql_query("SELECT * FROM Tabela WHERE id=".intval($_GET['id']));
... ?>
- ASP:
<% ...
conexiune.Execute "SELECT * FROM Tabela WHERE id=" & val(Request.QueryString("id"))
... %>
Mai trebuie facuta o observatie: parametri alterati pot veni nu doar din URL (GET) ci si POST sau cookie sau chiar valori inregistrate in baza de date pt. diverse informatii (semnatura alterata, adresa, etc.)
Asa ca orice web developer constient de posibilele probleme puse de SQL injection si care ia masuri impotriva acestei probleme le poate evita relativ usor.
Be Happy!!