by shigemk2

当面は技術的なことしか書かない

セキュリティ対策のポイント 入力検査の指針

ネットワークのセキュリティ対策で最も重要な部分は、「入力検査」(バリデーション) 「出力制御」(エスケープ、ヘルパー関数、バリデーション)、そして正しい「ロジック」である。

  1. 全ての入力を出来るだけ早い時点で確認する
  2. 許可する入力を確認する(ホワイトリスト方式、警戒する必要のない対象の一覧表)
  3. 許可する文字列の長さを確認する
  4. 文字エンコーディングを確認する
  5. 許可する文字種を確認する(特にヌル文字、改行などの特殊文字)
  6. 許可する形式を確認する
  7. 正規表現を使わずに文字種、形式の確認が出来る場合は利用しない
  8. ホワイトリスト方式による確認が現実的でない場合にのみ、ブラックリスト方式で確認する
  9. 通常の場合、クライアントから不正な文字列が送信されないと仮定できる場合、不正な文字列を検出した場合、少なくともエラーログを記録し、プログラムの実行を停止する

PHPにおいては、完全な入力検査に完全に従っているPHPアプリケーションは多くない。

とくに1は、入力検査に引っかかったらすぐに処理を停止しないといけない。
入力検査を処理の最後にやっても全く意味がないよ。

出来る入力検査はすべてやらないといけないね。
その上で、テストも漏れのないよう網羅してやらないといけませんね。