====== ファイルパスをサニタイズしない ====== セキュリティ対策ではサニタイズ処理は基本的に利用してはならない処理である。ファイルパスをサニタイズするだけでは対策にならない場合がある。 ディレクトリトラバーサル対策に"../"を文字列から除去しても".../.../..//"といった文字列で"../"を容易に作ることができるためリスクを排除できない ファイルへのアクセスを許可する場合、アクセス権限に注意する。強制ブラウズが行えないようにする。 ===== 非適合コード例 ===== **危険なサニタイズ操作** $safe_file_name = str_replace('../', '', $_GET['file']); このサニタイズではヌル文字や改行文字、制御コード、壊れた文字エンコーディングに対応していないため、ディレクトリトラバーサル以外にヌル文字インジェクション、改行インジェクション、制御コード挿入による不正操作・セキュリティ回避、壊れた文字エンコーディングによるインジェクションなどのリスクを除去・ 緩和できてない。 ===== 適合コード例 ===== ファイル名はホワイトリスト方式で確認する。 **適合コード** // ハッシュ値のファイル名をチェックする if (strlen($_GET['file']) != 32 || strspn('abcdef1234567890', $_GET['file']) != strlen($_GET['file'])) { throw new Exception('Invalid file name'); } $safe_file_name = $_GET['file']; ===== 例外 ===== 例外は設けない方が良い。 ===== リスク評価 ===== [評価例 - 英語表記に統一] ^ Rule ^ Severity ^ Likelihood ^ Remediation Cost ^ Priority ^ Level ^ | IDS05-J | medium | unlikely | medium | P4 | L3 | ===== 関連ガイドライン ===== ===== 参考文献 =====