私のget変数は逃げられていますか?
-
29-09-2019 - |
質問
私はここで本当に混乱しています、誰かが私にこれを説明できますか?
リクエスト:http://example.com/test.php?var=String's
$a = $_GET["var"];
$b = "String's";
echo $a . "<br/>";
echo $b . "<br/>";
$output = mysql_real_escape_string($a);
$output = mysql_real_escape_string($b);
echo "<hr/>";
echo $a . "<br/>";
echo $b . "<br/>";
結果:
String\'s
String's
----------------
String\'s
String's
なぜ私の取得変数がこのように変換されているのかだけでなく、入力が送信されたとおりになるようにこの動作を削除する方法だけでなく、誰かが私に説明できますか?私は私のSQLラッパーがmysql_real_escape_string()を介してこれを渡す問題を抱えています String\\\'s
:(
解決
それは呼ばれています 「魔法の引用」.
他のヒント
あなたはできる そしてすべきです 魔法の引用を無効にします。
優先モード
php.iniでそれらをオフにします
.htaccessモード
これをhtaccessファイルに追加します
php_flag magic_quotes_gpc off
PHP5ランタイムモード
<?php
if (get_magic_quotes_gpc()) {
function stripslashes_gpc(&$value)
{
$value = stripslashes($value);
}
array_walk_recursive($_GET, 'stripslashes_gpc');
array_walk_recursive($_POST, 'stripslashes_gpc');
array_walk_recursive($_COOKIE, 'stripslashes_gpc');
array_walk_recursive($_REQUEST, 'stripslashes_gpc');
}
?>
PHP4ランタイムモード
<?php
if (get_magic_quotes_gpc()) {
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
while (list($key, $val) = each($process)) {
foreach ($val as $k => $v) {
unset($process[$key][$k]);
if (is_array($v)) {
$process[$key][stripslashes($k)] = $v;
$process[] = &$process[$key][stripslashes($k)];
} else {
$process[$key][stripslashes($k)] = stripslashes($v);
}
}
}
unset($process);
}
?>
へようこそ magic_quotes
ハーターのクラブ! :)
おそらく魔法の引用がオンになっているでしょう。これにより、Get、Post、およびCookieデータが自動的に逃げます。魔法の引用は悪いものであり、データを適切に逃れるために頼るべきではありません。
php.iniにアクセスできる場合は、できます 魔法の引用をオフにします.
そうでない場合は、実行できます ストリップスラッシュ データ上でスラッシュを削除します。コードをポータブルにするには、まず確認する必要があります get_magic_quotes_gpc()
オンになっているかどうかを確認し、その後、ストリップスラッシュを実行します。このようにして、魔法の引用符がオフになっているサーバーにコードを移動すると、コードは引き続き機能します。
if(get_magic_quotes_gpc()) {
$a = stripslashes($_GET["var"]);
}
else $a = $_GET["var"];