SQL injection — foydalanuvchi yozgan ma'lumot orqali sayt DB'siga yomon SQL kiritish. 2024 OWASP Top 10'da hali ham birinchi.
Misol
Login forma: SELECT * FROM users WHERE name='$name' AND password='$pass'. Foydalanuvchi name maydoniga: admin' OR '1'='1 — query bo'ladi: WHERE name='admin' OR '1'='1' — har doim true, ya'ni admin'ga kiradi.
Yagona to'g'ri yo'l: Prepared Statements
PHP PDO: $st = $pdo->prepare('SELECT * FROM users WHERE name=?'); $st->execute([$name]); — foydalanuvchi yozgani SQL emas, parametr deb tushuniladi.
Nima bo'lmasin?
1) String concatenation: 'WHERE id=' . $_GET['id'] — eng xavfli. 2) escape funksiyalari (mysql_real_escape_string) — ishonchsiz, eskirgan. 3) Whitelist tekshiruvlar bilan birlashtirsa — yaxshi, lekin yagona himoya emas.
ORM
Eloquent (Laravel), Doctrine, Sequelize — avtomatik prepared statements ishlatadi.
Statik analiz
PHPStan, Psalm — SQL injection mumkin joylarni topadi.
WAF
Cloudflare WAF, ModSecurity — SQL injection hujumlarni server darajasida to'sadi. Ikkinchi qatlam himoya.
Penetration test
SQLMap — ochiq vositasi. O'z saytingizni sinab ko'ring. Yiliga 1 marta professional pentest tavsiya.