2012-03-02 7 views
2

PHP 5.2.17とmagic_quotes_gpcディレクティブを有効にしたサーバで動作する小さなPHPスクリプトを作成しました。filter_input()はいつPOST変数のスラッシュを削除しますか?

私は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()のスラッシュを設定/ない取り除くための行動ですか?
警告hereがわかりません。

答えて

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); 
} 
+0

私は、現時点では同様のものを使用しますが、filter_input()とfilter_input_array()は私が必要なことを行うならば、私は好みますそのための余分な再帰関数を書いていません。しかし、filter_inputが何をしているのか分かりません。それは知っていると素晴らしいでしょう。 –

3

私は公式ドキュメントでそれを見つけることに成功していましたが、filter_input()機能は、生データで動作し、magic_quotesの設定に影響されません。サニタイズフィルタFILTER_SANITIZE_MAGIC_QUOTESは、必要に応じてフィルタを入れます。

私はmagic_quotesが有効になっているレガシーシステムで働いているため、個人的には私にとって恩恵でした。 filter_input()関数を使用すると、スラッシュを挿入する前に値を使用してから、PDOにバインドすることができます。

これらの記事はそれについて話:
http://www.sitepoint.com/forums/showthread.php?590848-Filter_input-magic-quotes
https://weston.ruter.net/2013/10/22/revelations-about-filter_input/
http://php.net/manual/en/function.filter-input.php#99124

関連する問題