Класичний приклад
Запит SELECT * FROM users WHERE email = '{$email}' з введенням ' OR 1=1 -- перетворюється на WHERE email = '' OR 1=1 --' — і повертає всіх користувачів.
Захист
- Параметризовані запити / Prepared Statements — єдиний надійний спосіб. Дані і код SQL завжди розділені на рівні протоколу БД
- ORM — більшість сучасних ORM використовують prepared statements автоматично
- Whitelist валідація — перевіряти, що значення входить у дозволений список, а не просто екранувати
- Ніколи не підставляйте дані користувача напряму в SQL-рядок, навіть після
addslashes()