🛡️ Injecția SQL (SQLi): Ce Este, Cum Funcționează și Cum Să o Previi
SQL Injection (SQLi) este una dintre cele mai periculoase vulnerabilități web. Aceasta permite atacatorilor să acceseze, modifice sau șteargă date din baza de date a unei aplicații. Iată cum funcționează și cum o poți preveni eficient.
⚙️ Ce Este Injecția SQL?
Injecția SQL apare atunci când datele introduse de utilizatori sunt incluse direct în interogări SQL fără o validare sau protecție adecvată. Acest lucru permite executarea de comenzi malițioase care afectează baza de date.
Exemplu de cod vulnerabil:
sql CopiazăEditează SELECT * FROM users WHERE username = '$username' AND password = '$password';
Dacă un atacator introduce ' OR '1'='1, autentificarea poate fi ocolită complet.
🚨 Exemple de Atacuri SQLi
- Autentificare frauduloasă
- Furt de date personale
- Modificarea sau ștergerea datelor
- Acces la serverul de baze de date
- Executarea de comenzi pe server
🔐 Cum Prevenim Injecțiile SQL?
✅ 1. Folosește Interogări Parametrizate (Prepared Statements)
Evită construirea interogărilor SQL manual. Exemple:
php
CopiazăEditează
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :user AND password = :pass"); $stmt->bindParam(':user', $username); $stmt->bindParam(':pass', $password); $stmt->execute();
✅ 2. Escape corect al datelor
Dacă nu poți folosi PDO, atunci folosește mysqli_real_escape_string():
php CopiazăEditează $username = mysqli_real_escape_string($conn, $_POST['username']);
✅ 3. Validează toate datele
- Verifică lungimea, tipul și formatul.
- Nu permite caractere periculoase în câmpuri sensibile.
✅ 4. Aplică Principiul Minimului Privilegiu
- Contul MySQL al aplicației nu trebuie să aibă permisiuni de tip
DROP,DELETEetc.
✅ 5. Folosește un ORM
- Framework-uri precum Laravel, Symfony sau Doctrine folosesc ORM-uri care oferă protecție nativă.
✅ 6. Activează un Web Application Firewall (WAF)
- Protecție suplimentară împotriva atacurilor automate.
✅ 7. Testează și auditează codul regulat
- Folosește instrumente de testare (SQLMap, Burp Suite).
- Efectuează audituri periodice de securitate.
✅ Concluzie
SQL Injection este o amenințare reală, dar complet evitabilă. Aplică interogări parametrizate, validează datele utilizatorilor și limitează accesul în baza de date. Prevenția este întotdeauna mai ieftină decât remedierea unui atac.