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.