SQL-инъекция: защита в PHP и PDO
Передавайте значения отдельно от SQL. Динамические идентификаторы выбирайте только из заранее разрешённого набора.
$pdo->prepare('SELECT * FROM users WHERE id = :id')Угроза
Если пользовательская строка меняет структуру SQL, она может прочитать, изменить или удалить данные с правами приложения.
Значения
Именованный placeholder и execute() отделяют данные от кода запроса. Не заключайте placeholder в кавычки вручную.
Идентификаторы
ORDER BY и имя таблицы нельзя передать как обычное значение. Отображайте короткий ключ интерфейса на известный SQL-фрагмент.
Дополнительные меры
Минимальные права пользователя БД, безопасные журналы, ограничения выдачи и тесты отрицательных входов уменьшают последствия ошибки.
Антипаттерн
addslashes() и ручная замена кавычек не являются универсальной защитой SQL.
Связанные материалы
Источники и проверка
- PHP Documentation Group — структурный источник, без внешней ссылки
Последняя содержательная проверка: . Автор-разработчик Михаил Каржин. Методика качества контента.