$ _POST、$ _GET、$ _SERVER、... を使用しているときに、Netbeans 7.4 for PHPでこのメッセージ警告が表示されます。
スーパーグローバル$ _POST配列に直接アクセスしないでください
どういう意味ですか?この警告を修正するにはどうすればよいですか?
編集:イベントサンプルコードはまだこの警告を示しています。
$ _POST、$ _GET、$ _SERVER、... を使用しているときに、Netbeans 7.4 for PHPでこのメッセージ警告が表示されます。
スーパーグローバル$ _POST配列に直接アクセスしないでください
どういう意味ですか?この警告を修正するにはどうすればよいですか?
編集:イベントサンプルコードはまだこの警告を示しています。
回答:
filter_input(INPUT_POST, 'var_name')
代わりの$_POST['var_name']
filter_input_array(INPUT_POST)
代わりに$_POST
$name = filter_input(INPUT_POST, $_POST["name"]);
ます。
filter_input(INPUT_POST, 'var_name', FILTER_SANITIZE_NUMBER_INT)
少し遅いですが、同じ問題の解決策を探しているときにこの質問に出くわしたので、それが何かの助けになることを願っています...
あなたと同じ暗闇の中で私を見つけた。NetBeans 7.4で導入されたいくつかの新しいヒントを説明するこの記事を見つけました。
https://blogs.oracle.com/netbeansphp/entry/improve_your_code_with_new
それが追加された理由は、スーパーグローバルは通常ユーザー入力で満たされているためです。これは決して盲目的に信頼されるべきではありません。代わりに、ある種のフィルタリングを行う必要があります。それがヒントから示唆されています。有害なコンテンツがある場合は、スーパーグローバル値をフィルタリングします。
たとえば、私が持っていた場所:
$_SERVER['SERVER_NAME']
代わりに私は入れました:
filter_input(INPUT_SERVER, 'SERVER_NAME', FILTER_SANITIZE_STRING)
ここにfilter_inputとfiltersのドキュメントがあります:
ほとんどの場合(ほとんどの場合)、あなたの入力をサニタイズする必要があると他の回答者に同意します。
ただし、次のようなコードを検討してください(RESTコントローラー用です)。
$method = $_SERVER['REQUEST_METHOD'];
switch ($method) {
case 'GET':
return $this->doGet($request, $object);
case 'POST':
return $this->doPost($request, $object);
case 'PUT':
return $this->doPut($request, $object);
case 'DELETE':
return $this->doDelete($request, $object);
default:
return $this->onBadRequest();
}
ここでサニタイズを適用することはあまり役に立ちません(ただし、何も壊すことはありません)。
だから、推奨事項に従ってください、しかし盲目的ではありません-むしろそれらが何のためにあるのかを理解してください:)
使うだけ
$ _INPUT_METHOD_NAME ['var_name']の代わりにfilter_input(INPUT_METHOD_NAME、 'var_name')$ _INPUT_METHOD_NAMEの代わりにfilter_input_array(INPUT_METHOD_NAME)
例えば
$host= filter_input(INPUT_SERVER, 'HTTP_HOST');
echo $host;
の代わりに
$host= $_SERVER['HTTP_HOST'];
echo $host;
そして使う
var_dump(filter_input_array(INPUT_SERVER));
の代わりに
var_dump($_SERVER);
注意:他のすべてのスーパーグローバル変数に適用します