PHP 5.3 автоматически экранирует $GET/$POST из строк формы?


Мой администратор сервера недавно обновился до PHP 5.3, и я получаю странную "ошибку" (или функцию , как у людей PHP). У меня было mysql_real_escape_string вокруг большинства моих данных строковой формы по очевидным соображениям безопасности, но теперь, похоже, это экранирование уже выполнено PHP.

<?php

echo $_GET["escaped"];

?>

<form method="get">
    <input type="text" name="escaped" />
</form>

Это выводит, если я, например, ввожу escape 'this test', escape \'this test\'. То же самое происходит, если я использую POST вместо GET.

Связано ли это напрямую с обновлением 5.3 или мой администратор мог активировать какой-то автоматический переключатель в файл php.ini?

Кроме того, должен ли я просто оставить его как есть (в том случае, если это действительно хороший механизм защиты от сбоев, который правильно улавливает все переменные get и post), или мне следует отключить его (если это вообще возможно!) и вернуться к mysql_real_escape_string? Мое чутье подсказывает мне, что подход 2 был бы лучшим, но подход 1 был бы несколько автоматическим.:)

РЕДАКТИРОВАТЬ: На самом деле, мне нужно отключить его. Иногда я собираю данные формы и повторно отправляю их в форму клиента на случай, если что-то было не так (т. Е. Отсутствует поле), поэтому я не хочу, чтобы у него/нее были косые черты, появляющиеся из ниоткуда.

Author: hakre, 2011-07-10

4 answers

Эта "особенность" известна как magic_quotes_gpc и разве не защищает вас от всех атак с использованием SQL-инъекций (addslashes вызывается для каждого элемента входных суперглобалов, таких как $_POST и $_GET. Это игнорирует фактическую кодировку ввода/базы данных). Поэтому он устарел и не должен использоваться.

Официальное руководство по php содержит аккуратный способ отменить в коде php , но вы должны просто отключить его.

 11
Author: phihag, 2011-07-10 18:26:07

Это связано с волшебными кавычками , вы должны отключить его.

И вот как вы его отключаете: http://www.php.net/manual/en/security.magicquotes.disabling.php

Вы делаете это либо через php.ini, либо удаляя косые черты из всех переменных в $_GET и $_POST, очевидно, что первый способ является рекомендуемым.


Как предлагает Уилл Мартин, вы также можете изменить его с помощью .htaccess вот так:

php_flag magic_quotes_gpc off

Более подробная информация здесь: http://php.net/manual/en/configuration.changes.php

 6
Author: Nicklas A., 2011-07-10 19:15:22
 1
Author: Greenisha, 2011-07-10 18:11:44

Похоже, на вашем сервере включены волшебные кавычки - вы можете взглянуть на http://www.php.net/manual/en/security.magicquotes.disabling.php для подробного обсуждения способов их отключения.

 1
Author: Sam Dufel, 2011-07-10 18:12:29