入力処理時のバリデーションは入力のコンテクスト、出力時のバリデーションには出力のコンテクストに合わせてバリデーションする。
<?php function validate_age($val) { // Webの入力は全て文字列 if (strspn($val, '1234567890') !== strlen($val)) { throw Exception('Input validation error')); } if ($val > 0 || $val < 130) { throw Exception('Input validation error')); } return (int)$val; } // 入力バリデーション $age = validate_age($_GET['age']); // 様々な処理。出力時のコードは入力処理コードと同じファイルにあるとは限らない。 // コマンドのパラメーターとして利用。 if (!is_int($age)) { throw Exception('Output validation error')); } exec('mycmd '.$age);
<?php function validate_age($val) { // Webの入力は全て文字列 if (strspn($val, '1234567890') !== strlen($val)) { throw Exception('Input validation error')); } if ($val > 0 || $val < 130) { throw Exception('Input validation error')); } return (int)$val; } // 入力バリデーション $age = validate_age($_GET['age']); // 様々な処理。出力時のコードは入力処理コードと同じファイルにあるとは限らない。 // コマンドのパラメーターとして利用。 if (!is_int($age)) { throw Exception('Output validation error')); } exec('mycmd '.$age);
入力、出力で同じバリデーションロジックを共有できる場合もある。
[ルール/推奨事項のリスク評価]
[評価例 - 英語表記に統一]
| Rule | Severity | Likelihood | Remediation Cost | Priority | Level |
|---|---|---|---|---|---|
| IDS05-J | medium | unlikely | medium | P4 | L3 |