SQL-ін’єкція (SQLi) — атака на вебзастосунок, під час якої шкідливе введення вбудовується в запит до бази даних, і атакувальник читає, змінює або видаляє дані без права доступу до них.
Як працює SQL-ін’єкція
Вразливість виникає, коли застосунок збирає SQL-запит, просто вставляючи в його текст дані користувача. Припустімо, форма входу виконує SELECT * FROM users WHERE name = 'введення'. Тоді введення ' OR '1'='1 змінює логіку запиту.
Різновиди:
- класична (in-band) — результат видно просто на сторінці (через помилки чи UNION);
- сліпа (blind) — дані обчислюють за відповідями «так/ні» або за затримками відповіді;
- позасмугова (out-of-band) — дані надсилаються на сервер атакувальника.
За відповідної СУБД і прав SQLi дає змогу не лише викрасти дані, а й записати файли, аж до віддаленого виконання коду. Пошук і експлуатацію автоматизують інструменти на кшталт sqlmap.
Чому SQL-ін’єкції небезпечні
Це одна з найстаріших вебвразливостей, і вона досі входить до категорії «Ін’єкції» OWASP Top 10. Через SQLi ставалися великі витоки:
- атака на Heartland Payment Systems 2008 року розкрила понад 100 млн номерів карток;
- 2023 року угруповання Cl0p через SQL-ін’єкцію в MOVEit Transfer (CVE-2023-34362) викрало дані тисяч організацій.
Як запобігти
- Використовуйте параметризовані запити (prepared statements) або безпечний ORM. Ніколи не склеюйте введення з SQL.
- Надавайте обліковому запису застосунку в базі лише необхідні права.
- Перевіряйте вхідні дані, не показуйте користувачам детальні помилки СУБД, тестуйте код інструментами SAST/DAST.
- Міжмережевий екран вебзастосунків (WAF) корисний як додатковий шар, але не замінює виправлення коду.