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

StackOverflow https://stackoverflow.com/questions/2688526

Вопрос

Если у меня есть 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.
Wuth обычный PHP / Apache Config, эта строка

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, будет ли Trening Double сбежать?

Да, это будет, но вы могли бы сделать что-то вроде этого, хотя:

if (get_magic_quotes_gpc())
{
  $escaped = stripslashes($your_vars);
}

Примечание: Вы можете отключить волшебные цитаты из PHP.INI или используйте функцию ниже, чтобы переопределить ее:

// no more magic quotes
function get_magic_quotes_gpc()
{ 
  return false;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top