ja:rule:inp:入力バリデーションにブラックリスト方式を用いない
This is an old revision of the document!
入力バリデーションにブラックリスト方式を用いない
入力バリデーションにはホワイトリスト方式を用い、ブラックリスト方式は用いない。サイニタイズはブラックリスト方式であり、利用は極力避ける。
ホワイトリスト方式はデフォルトで全てを拒否し、必要最小限を許可する方式である。デフォルトで全てを拒否していないとホワイトリストにひはならない。
非適合コード例
if (strstr($_POST['email'], "\0")) { throw new Exception('email cannot contain null char'); } some_useful_function($_POST['email']);
ヌル文字のみチェックするブラックリスト方式では不必要なリスク/不安定要素をコード内に持ち込む。
適合コード例
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL); if ($email === FALSE) { throw new Exception('Invalid email'); } some_useful_function($email);
FILTER_VALIDATE_EMAILはRFC822形式(コメントなどは除く)のメールアドレスのみを許可する。
例外
バリデーションエラーが大量に発生することが問題になる場合はサニタイズフィルターの利用を検討してもよい。
リスク評価
[ルール/推奨事項のリスク評価]
[評価例 - 英語表記に統一]
| Rule | Severity | Likelihood | Remediation Cost | Priority | Level |
|---|---|---|---|---|---|
| IDS05-J | medium | unlikely | medium | P4 | L3 |
関連ガイドライン
参考文献
ja/rule/inp/入力バリデーションにブラックリスト方式を用いない.1458282932.txt.gz · Last modified: 2016/03/18 06:35 by yohgaki
