ianuarie 3, 2010 Cum sa evitam atacurile SQL Injection?
Ce este SQL injection?
SQL injection este un atac asupra bazelor de date a website-urilor dinamice si nu numai. O baza de date permisiva si nesecurizata este usor expusa acestor tipuri de atacuri la nivel de aplicatie.
Un simplu exemplu pentru un astfel de atac este atacul asupra unui formularul de login. Asupra acestui formular se poate injecta un cod SQL care sa modifice anumite date in baza de date sau sa extraga informatii private.
Daca vrem sa ne logam intr-un cont cu usernameul, un exemplu "vasile" insa in loc de "vasile" introducem "vasile';DROP TABLE users; SELECT * FROM data WHERE 't' = 't".
Cum se va forma in baza de date comanda SQL?
SELECT * FROM users WHERE name = 'vasile';DROP TABLE utilizatori; SELECT * FROM DATA WHERE 'x' = 'x';
Consecinta? Unde o fi tabela Utilizatori? Raspunsul inevitabil: Nu este!
Cum sa protejam baza de date?
- Este indicat sa folosim useri cu privilegii limitate. Nu e indicat sa ne conectam ca superuseri sau ca alt utilizator ce poate manipula mai multe baze de date, nu numai cea in discutie.
- Trebuie introduse functii de validare, de la cele mai simple, pe variabile, si pana la expresii regulate.
- Pentru inputuri numerice este indicat sa folosim functia "is numeric()".
- Pentru valori numerice putem folosi functia "string escape" specifice SGBD-ului.
- Nu trebuie sa afisam informatii specifice bazei de date, precum schema.
- Trebuie sa evitam posibilitatea introducerii de caractere precum: ghilimele simple, ghilimele duble, slash, backslash, punct si virgula, caractere extinse precum NULL, linie noua, etc. in toate stringurile de input pentru utilizatori, parametri in URL si valori din cookie.

