Использование magic_quotes () влияет на использование mysql_real_escape_string ()

Если у меня включен 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; }