$_GET および $_POST から変数の値をフィルタリングするには、trim()、strip_tags()、および addslashes() の組み合わせで十分かどうか疑問に思っています。
3 に答える
2
これは、実行する検証の種類によって異なります。
ここにいくつかの基本的な例があります:
- データをMySQLクエリで使用する場合は、addslashes()ではなくmysql_real_escape_query()を使用してください。
- ファイルパスが含まれている場合は、必ず「../」の部分を削除し、機密ファイル名へのアクセスをブロックしてください。
- Webページにデータを表示する場合は、必ずhtmlspecialchars()を使用してください。
ただし、最も重要な検証は、期待する値のみを受け入れることです。つまり、数値などを期待する場合にのみ数値を許可します。
于 2009-12-09T03:39:50.973 に答える
1
それはあなたがそれをどこで使うつもりかによって大きく異なります。
- HTMLとして表示する場合は、エンコーディングを適切に指定していることを絶対に確認してください(例:UTF-8)。すべてのタグを削除する限り、問題はありません。
- SQLクエリで使用するには、addslashesだけでは不十分です。たとえば、mysqliライブラリを使用する場合は、mysql::real_escape_stringを確認する必要があります。その他のDBライブラリについては、指定されたエスケープ関数を使用してください。
- javascriptで文字列を使用する場合は、addslashesでは不十分です。
- ブラウザのバグについて妄想している場合は、OWASPReformライブラリを確認してください。
- HTML以外のコンテキストでデータを使用する場合は、他のエスケープ手法が適用されます。
于 2009-12-09T03:37:51.460 に答える
1
短い答え:いいえ。
長い答え:場合によります。
基本的に、何をしたいのかを考えずに、ある程度のフィルタリングが十分である、または不十分であるとは言えません。たとえば、上記は "javascript:dostuff();" の通過を許可しますが、リンクの href 属性でこれらの GET または POST 値のいずれかを使用した場合、これは問題ない場合とそうでない場合があります。
同様に、ユーザーが編集できるリッチ テキスト エリアがある場合、そこからタグを削除しても意味がありません。
私が言おうとしているのは、データを消去して「完了」と言うことができるように、データをサニタイズするための簡単な一連の手順があるということだと思います。そのデータが何をしているのかを常に考慮する必要があります。
于 2009-12-09T03:36:37.420 に答える