Мой администратор сервера недавно обновил до 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 будет несколько автоматическим. 🙂
EDIT: На самом деле, мне нужно отключить его. Иногда я собираю данные формы и отправляю ее в клиентскую форму, если что-то не так (т. Е. Отсутствует поле), поэтому я не хочу, чтобы у него / нее появлялись слеши из ниоткуда.
Эта «функция» известна как 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 для подробного обсуждения способов их отключения.