1

magic_quotes電源を入れて使用した場合mysql_real_escape_string、文字列は二重にエスケープされますか?問題が発生しますか?

機能に基づいてそう思いget_magic_quotes()ますが、確認を求めているだけです。

(PSこの質問をするのは、私たちが持っているすべてのセキュリティを備えた私のオフィスでテストするよりも簡単です-使用可能な環境を取得するためにすべてを構成するのに10〜15かかります)

4

4 に答える 4

4

ドキュメントをmysql_real_escape_string読んでください(これも難しくないことを願っています):

注:magic_quotes_gpcが有効になっている場合は、最初stripslashes()にデータに適用します。すでにエスケープされているデータに対してこの関数を使用すると、データが 2 回エスケープされます。

于 2010-04-22T06:04:48.160 に答える
3

get/post/cookie の入力から取得した値をエスケープすると、値は既にaddslashes()適用されているため、実際に渡すとmysql_real_escape_string()二重引用符になります。

em を取り除くには:

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_gpcPHPの「機能」を処理したりするための他のオプションがいくつかあります。

于 2010-04-22T06:04:16.023 に答える
1

もちろん、最も簡単な方法は、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']);
}

最も簡単なものの1つ

于 2010-04-22T06:29:15.533 に答える
0

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;
}
于 2010-04-22T06:09:03.410 に答える