Если у меня включен magic_quotes и я использую mysql_real_escape_string , будет ли строка двойным с экранированием? Это вызовет проблемы?
Я предполагаю, что это основано на функции get_magic_quotes() но просто ищет подтверждение.
(PS Легче задавать этот вопрос, чем тестировать его в моем офисе со всей имеющейся у нас защитой – мне нужно 10-15, чтобы настроить все, чтобы получить полезную среду)
Если вы выберете значение, полученное из ввода get / post / cookie, у него уже будет применено приложение addslashes() , поэтому передача его через mysql_real_escape_string() будет фактически двойной котировкой.
Чтобы раздеть их:
if (get_magic_quotes_gpc()) { $_GET = json_decode(stripslashes(json_encode($_GET, JSON_HEX_APOS)), true); $_POST = json_decode(stripslashes(json_encode($_POST, JSON_HEX_APOS)), true); $_COOKIE = json_decode(stripslashes(json_encode($_COOKIE, JSON_HEX_APOS)), true); $_REQUEST = json_decode(stripslashes(json_encode($_REQUEST, JSON_HEX_APOS)), true); ini_set('magic_quotes_gpc', 0); }
У этого вопроса есть некоторые другие варианты удаления цитат / работы с ужасной функцией magic_quotes_gpc PHP.
Прочтите документацию mysql_real_escape_string (надеюсь, это тоже не сложно):
Примечание. Если
magic_quotes_gpcвключен, сначала применитеstripslashes()к данным. Использование этой функции для данных, которые уже были экранированы, приведет к двойному удалению данных.
Конечно, самый простой способ – отключить magic_quotes.
с обычной конфигурацией PHP / Apache, эта строка
php_flag magic_quotes_gpc 0
в файле .htaccess будет делать что-то.
но для цели совместимости функция также может использоваться в некоторых конфигурационных файлах.
if ( get_magic_quotes_gpc( ) ) { $_GET = array_map_recursive('stripslashes', $_GET) ; $_POST = array_map_recursive('stripslashes', $_POST) ; $_COOKIE = array_map_recursive('stripslashes', $_COOKIE) ; $_REQUEST = array_map_recursive('stripslashes', $_REQUEST) ; if (isset($_SERVER['PHP_AUTH_USER'])) stripslashes($_SERVER['PHP_AUTH_USER']); if (isset($_SERVER['PHP_AUTH_PW'])) stripslashes($_SERVER['PHP_AUTH_PW']); }
один из самых простых
Если у меня включен magic_quotes, и я использую mysql_real_escape_string, будет ли двойное экранирование траншей?
Да, это будет, но вы могли бы сделать что-то вроде этого, хотя:
if (get_magic_quotes_gpc()) { $escaped = stripslashes($your_vars); }
Примечание. Вы можете отключить магические кавычки из PHP.ini или использовать следующую функцию, чтобы переопределить ее:
// no more magic quotes function get_magic_quotes_gpc() { return false; }