29

この質問は、もともとここのコメントで尋ねられました。

ユーザー提供のデータを出力する前に、パラメーター化されたクエリとhtmlspecialchars()を使用している場合でも、filter_input()は必要ですか?

私には不必要に思えますが、私は常に「入力をフィルタリングし、出力をエスケープする」ように言われてきました。では、データベース (または別の形式のストレージ) 以外に、入力データをフィルタリングする必要はありますか?

4

2 に答える 2

34

まぁ、意見が分かれるだろうけど。

私の意見では、常にそれを使用する必要があります (または、filter一般的には拡張機能)。これには少なくとも 3 つの理由があります。

  1. 入力のサニタイズは、常に行う必要があります。関数がこの機能を提供するため、入力をサニタイズする他の方法を見つける理由はありません。これは拡張機能であるため、フィルターは、そこにあるほとんどの PHP ソリューションよりもはるかに高速で、おそらく安全です。これは確かに問題ありません。唯一の例外は、より特殊なフィルターが必要な場合です。FILTER_UNSAFE_RAWその場合でも、フィルターを使用して値を取得する必要があります (#3 を参照)。

  2. filter拡張機能にはたくさんの特典があります。サニタイズと検証のコードを書く時間を節約できます。もちろん、すべてのケースをカバーしているわけではありませんが、特定のフィルタリング/検証コードに集中できるようにするには十分です。

  3. この関数を使用すると、コードをデバッグ/監査するときに非常に適しています。関数を使用すると、入力がどうなるかが正確にわかります。たとえば、FILTER_SANITIZE_NUMBER_INTフィルターを使用すると、入力が数値になることを確認できます-SQL インジェクション、HTML または Javascript コードなどはありません。一方、次のようなものを使用するFILTER_UNSAFE_RAWと、慎重に扱う必要があり、セキュリティ上の問題を簡単に引き起こす可能性があります。

于 2013-02-27T03:14:50.027 に答える