Table of Contents

入力処理時のバリデーションを出力処理時のバリデーションとしない

入力処理時のバリデーションは入力のコンテクスト、出力時のバリデーションには出力のコンテクストに合わせてバリデーションする。

非適合コード例

<?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

関連ガイドライン

参考文献