SQL-инъекция, когда включена магическая кавычка
Возможные дубликаты:
Одиночные кавычки экранируются автоматически в PHP? Тогда зачем нужна уборка?
Успешное внедрение SQL несмотря на магические кавычки PHP
Ранее сегодня я спросил об автоматическом экранировании кавычек и узнал о магических кавычках. Поток находится по адресу. Автоматически ли экранируются одинарные кавычки в PHP? Тогда зачем нужна уборка?,
Мы пришли к общему мнению, что магических кавычек недостаточно, и что мы всегда должны проверять и очищать вводимые пользователем данные, а также использовать подготовленные запросы.
Тем не менее, это приводит к этому вопросу, на сервере с включенной магической цитатой, какие SQL-инъекции будут обходить меры безопасности, налагаемые волшебными цитатами? Почему магические кавычки небезопасны?
Чтобы убедить меня в том, что магические кавычки небезопасны, я хотел бы увидеть реальный пример инъекции, которая могла бы обойти эти меры. Я создал тест, настроенный на моем локальном сервере с кодом:
$foo = $_POST['foo'];
$sql = "SELECT * FROM bar WHERE foo='".$foo."'";
$result = query($sql);
где query() - это обычный код, необходимый для выполнения запроса. Нет очистки, что так всегда. Тем не менее, волшебная цитата включена.
Какие-нибудь примеры инъекций, которые обходили бы магические кавычки на этой установке?
Ура,
Erik
1 ответ
Проблема в том, что магические кавычки используют PHP addslashes()
функция, которая не поддерживает Unicode (что означает, что многобайтовые символы не экранированы).
Это должно быть все, что вам нужно.