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 был бы несколько автоматическим.:)
РЕДАКТИРОВАТЬ: На самом деле, мне нужно отключить его. Иногда я собираю данные формы и повторно отправляю их в форму клиента на случай, если что-то было не так (т. Е. Отсутствует поле), поэтому я не хочу, чтобы у него/нее были косые черты, появляющиеся из ниоткуда.
4 answers
Эта "особенность" известна как magic_quotes_gpc
и разве не защищает вас от всех атак с использованием SQL-инъекций (addslashes
вызывается для каждого элемента входных суперглобалов, таких как $_POST
и $_GET
. Это игнорирует фактическую кодировку ввода/базы данных). Поэтому он устарел и не должен использоваться.
Официальное руководство по php содержит аккуратный способ отменить в коде php , но вы должны просто отключить его.
Это связано с волшебными кавычками , вы должны отключить его.
И вот как вы его отключаете: 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
Проверка http://www.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc опция в php.ini
Похоже, на вашем сервере включены волшебные кавычки - вы можете взглянуть на http://www.php.net/manual/en/security.magicquotes.disabling.php для подробного обсуждения способов их отключения.