11

php (およびフロントエンドの js) を使用して、すべての入力データに入力検証を実装しました。私はできる限り型キャストを行い、正規表現に対して電子メールなどを検証し、ドロップダウン値が私が期待しているものだけであることを確認します。また、多くの場合、文字列のみを期待しています。文字、数字、スペース。これらのルールを満たさないものはすべて、フォームの検証に失敗し、SQL クエリは実行されません。

そうは言っても、フォームが検証に合格した場合、データベースへの入力が安全であると仮定し(これはpdoを介して行っています)、出力時にエスケープします。

では、なぜ入力のサニタイズが必要なのですか?

4

2 に答える 2

8

サーバー側の検証が非常に厳密な場合は、サナタイズする必要はありません。例えば。/^[a-z0-9]{5,25}$/ に対して文字列を検証する場合、サニタイズは必要ありません (英数字以外の文字を削除しても意味がありません。とにかく通過できないためです)。

すべてのデータを検証できることを確認してください。それが不可能な場合 (たとえば、html では少し難しい傾向があります)、エスケープ戦略や html purifier などを使用できます。

XSS 防止のためのエスケープ戦略の概要については、https ://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet を参照してください。

さまざまなセキュリティの脅威については、 https ://www.owasp.org/index.php/PHP_Security_Cheat_Sheet を参照してください。

于 2013-07-05T13:55:37.527 に答える