テスト項目は、ごく普通の異常系のテストだ。しかし、対象となるパラメータが、CookieやHiddenフィールド、ラジオボタン、チェックボックス、セレクトリストが含まれるのが普通の異常系のテストと異なるかもしれない。
残念ながら、多くの開発者はHTTPヘッダ、CookieやHiddenフィールドなどが変更可能であるという認識が少ないように思う。実際、幾つかの検査で、Textフィールドには問題が無くても、Hiddenフィールドやラジオボタンなどのパラメータには脆弱性があるということが多々あった。ブラウザから渡されるものは、HTTPヘッダも含めてすべて変更可能であるという認識でテスト項目を作成し、テストを実施してほしい。
まとめ
今回説明したようなレビューとテストを行うことで、より安全なウェブアプリケーションを構築することができる。今回のまとめは、以下のとおり。
設計レビュー |
---|
・各機能、データのリスク分析が適切に評価されているか? ・リスクに対する対策が適切に行われ、明確になっているか? |
コードレビュー |
・データフローを確認し、入力時の検証と出力時のエスケープ処理がなされているか? ・エラー処理が適切に実装されているか? ・境界条件が正しいか? |
テスト |
・異常系のテストを十分にする。 ・TextフィールドやTextAreaフィールドだけでなく、Hiddenフィールドなどでも意図しないデータを入力データとしたテストを実施する。 |
これらは、アプリケーション開発で当たり前にやるべきことだ。しかし、実際の現場ではこれらが行われていないことが多い。実際にこれらすべてのチェックを実施しようとすると、現在の短納期での開発では工数がかかりすぎてしまうため、現実的ではない。
そのような場合でも、少なくとも、異常系のテストを十分に行うことで、存在する脆弱性をリリース前に発見し、修正することで安全なアプリケーションを提供することが可能になる。
今回は、チェックの一般論について説明した。次回以降は、実際の脆弱性のチェックをどのようにするのか具体的に説明していこうと思う。
■著者プロフィール
池田雅一テクマトリックス シニア・エンジニア
テクマトリックス シニア・エンジニア。2000年よりウェブアプリケーションやネットワークに関する脆弱性検査に従事。Watchfireのウェブアプリケーション脆弱性評価ツール「AppScan」を活用し、大手企業に対してウェブアプリケーションのセキュリティコンサルを実施した経験を持つ。
■関連ホワイトペーパー
・WEBアプリケーションのセキュリティ:自動スキャンと手動による侵入テストの比較
・WEB アプリケーションにおける権限拡張の自動テスト