Влияет ли использование magic_quotes () на использование mysql_real_escape_string () - PullRequest
1 голос
/ 22 апреля 2010

Если у меня включен magic_quotes и я использую mysql_real_escape_string, будет ли строка дважды экранирована? Это вызовет проблемы?

Я полагаю, что это основано на функции get_magic_quotes(), но просто запрашиваю подтверждение.

(П.С. Задать этот вопрос проще, чем проверить его в моем офисе со всей имеющейся у нас безопасностью - мне нужно 10-15, чтобы все настроить, чтобы получить удобную среду)

Ответы [ 4 ]

4 голосов
/ 22 апреля 2010

Прочитайте документацию mysql_real_escape_string (надеюсь, это тоже не сложно):

Примечание: Если magic_quotes_gpc включено, сначала примените stripslashes() к данным. Использование этой функции для данных, которые уже были экранированы, дважды удалит данные.

3 голосов
/ 22 апреля 2010

Если вы укажете значение, полученное из ввода 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-функцией '.

1 голос
/ 22 апреля 2010

Конечно, самый простой способ - отключить 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']);
}

один из самых простых

0 голосов
/ 22 апреля 2010

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