2

magic_quotes_gpcPHP5.2.17とディレクティブが有効になっているサーバーで実行される小さなPHPスクリプトを作成しました。

php.iniファイルへの書き込みアクセス権がないので、ユーザー入力からすべてのスラッシュを削除したいと思います。

これは、magic_quotes_gpcディレクティブがオフになっている場合でも機能するはずです(たとえば、スクリプトを別のサーバーに移動する場合)。

また、配列がユーザーによって送信されたときに再帰的に機能する必要があります。
私は組み込み関数を使用することを好みます。

<html>
<head>
    <title>HP</title>
</head>
<body>

<form method="POST" action="magic.php">
<input type="text" value="te\\&quot;st" name="test1">
<input type="text" value="te\\&quot;st" name="test2[tw&quot;o]">
<input type="submit" value="submit">
</form>
<?php

echo "<pre>";
echo "magic_quotes: ".get_magic_quotes_gpc()."\n";
echo "<hr>test1";
echo "filter_input: ".filter_input(INPUT_POST, "test1")."\n";
echo "POST:         ".$_POST['test1']."\n";

echo "<hr>test2 (filter)";
print_r(filter_input_array(INPUT_POST))."\n";

echo "<hr>test2 (post)";
print_r($_POST)."\n";

echo "</pre>";

?>
</body>
</html>

これにより、サーバーで次の結果が得られます。

magic_quotes: 1

filter_input: te\\"st
POST:         te\\\\\"st

test2 (filter)Array
(
    [test1] => te\\"st
    [test2] => Array
        (
            [tw\"o] => te\\"st
        )

)

test2 (post)Array
(
    [test1] => te\\\\\"st
    [test2] => Array
        (
            [tw\"o] => te\\\\\"st
        )

)

配列キーを除いて、スラッシュが削除されているようです。

または、スラッシュが追加されることはありませんか?(非推奨であるため、ディレクティブを無視する可能性がfilter_input()ありますが、その参照は見つかりませんでした)filter_input_array()magic_quotes_gpc

スラッシュを削除する/設定しない動作は、filter_input()システムfilter_input_array()パラメータに依存していますか?ここで
の警告がわかりません。

4

2 に答える 2

0

私は通常、magic_quotes 設定に対して入力データを正規化するために、次の行に沿って何かを使用します。

function deslash (array $data)
{
    foreach ($data as $key => $val)
    {
        $data [$key] = is_array ($val)? deslash ($val): stripslashes ($val);
    }
    return $data;
}

if ((!empty ($_POST)) && (get_magic_quotes_gpc ()))
{
    $posted = deslash ($_POST);
}
于 2012-03-02T12:27:40.760 に答える