magic_quotes
電源を入れて使用した場合mysql_real_escape_string
、文字列は二重にエスケープされますか?問題が発生しますか?
機能に基づいてそう思いget_magic_quotes()
ますが、確認を求めているだけです。
(PSこの質問をするのは、私たちが持っているすべてのセキュリティを備えた私のオフィスでテストするよりも簡単です-使用可能な環境を取得するためにすべてを構成するのに10〜15かかります)
magic_quotes
電源を入れて使用した場合mysql_real_escape_string
、文字列は二重にエスケープされますか?問題が発生しますか?
機能に基づいてそう思いget_magic_quotes()
ますが、確認を求めているだけです。
(PSこの質問をするのは、私たちが持っているすべてのセキュリティを備えた私のオフィスでテストするよりも簡単です-使用可能な環境を取得するためにすべてを構成するのに10〜15かかります)
ドキュメントをmysql_real_escape_string
読んでください(これも難しくないことを願っています):
注:
magic_quotes_gpc
が有効になっている場合は、最初stripslashes()
にデータに適用します。すでにエスケープされているデータに対してこの関数を使用すると、データが 2 回エスケープされます。
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_gpc
PHPの「機能」を処理したりするための他のオプションがいくつかあります。
もちろん、最も簡単な方法は、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つ
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;
}