Injecția SQL (SQL Injection) este o tehnică de atac prin care atacatorul introduce comenzi de bază de date malițioase într-un câmp de formular, o adresă URL sau alt punct de intrare al unei aplicații web, manipulând astfel baza de date din spate pentru a fura, modifica sau șterge date fără autorizare. Este una dintre cele mai vechi și mai des întâlnite vulnerabilități ale aplicațiilor web, deși remediul e cunoscut de zeci de ani.
Cum funcționează o injecție SQL?
Multe aplicații web construiesc întrebări către baza de date folosind direct textul introdus de utilizator — de exemplu, numele și parola dintr-un formular de login. Dacă aplicația nu verifică și nu "curăță" corect acest text, un atacator poate introduce, în loc de un nume obișnuit, o bucată de cod SQL care schimbă complet sensul comenzii — de exemplu, forțând baza de date să returneze toate înregistrările, să ocolească verificarea parolei sau chiar să șteargă un tabel întreg.
De ce contează?
Pentru că baza de date conține, de obicei, cele mai sensibile informații ale unei organizații: conturi de utilizatori, parole (sperăm, protejate printr-o funcție hash), date de facturare, informații personale ale clienților. O injecție SQL reușită poate expune toate aceste date dintr-o singură mișcare, fără ca atacatorul să aibă nevoie de un cont valid sau de acces fizic la server.
Cum te protejezi?
- Dezvoltatorii trebuie să folosească interogări parametrizate (prepared statements), nu concatenare directă a textului introdus de utilizator în comenzi SQL.
- Validează și filtrează strict orice date introduse de utilizator, pe server, nu doar în browser.
- Limitează drepturile contului de bază de date folosit de aplicație la strictul necesar — nu folosi un cont cu drepturi depline pentru operațiuni obișnuite.
- Testează periodic aplicațiile web printr-un test de penetrare, care caută explicit acest tip de vulnerabilitate.
Un exemplu concret
Formularul de căutare al unui magazin online nu filtrează corect textul introdus. Un atacator introduce, în loc de un termen obișnuit de căutare, o comandă SQL construită special, care returnează toate datele de card stocate în baza de date, deși ecranul afișat pare complet obișnuit, ca orice rezultat de căutare.
Nu știi dacă site-ul sau aplicația firmei tale sunt vulnerabile la injecții SQL? Cere un test de penetrare.
Întrebări frecvente
Injecția SQL afectează doar site-uri vechi sau prost făcute?
Deși e o vulnerabilitate cunoscută de mult, apare frecvent și în aplicații noi, ori de câte ori dezvoltatorii nu urmează practicile corecte de validare a datelor introduse de utilizator.
Un firewall obișnuit oprește injecțiile SQL?
Un firewall clasic de rețea, nu. E nevoie de un firewall de aplicație web (WAF) sau, mai bine, de cod scris corect de la bază, cu interogări parametrizate.
