コーディング規約
これらのチェックをコードのすべてに対して行うのは非常に大変な作業となる。そこで、レビューしやすいように以下のようなコーディング規約を決めることをお勧めする。
●安全でない変数:関数のプレフィックスに「us」を、安全な変数、関数のプレフィックスに「sf」を命名規約で指定する。たとえば、「sfHoge=unHuga」といったようにプレフィックスが異なると脆弱性の可能性があるとすぐに判断できる(間違ったコードは間違って見えるようにするを参照)。
●安全なライブラリ:フレームワークの機能を使用する。すでに存在しているライブラリや、フレームワークの機能を自作すると、バグが混入する危険性がある。既存の安全なものがあれば、それを利用するようにしてほしい。この結果、コードレビューの手間も減らすことができる。
これら以外にも、言語の仕様上脆弱性となりうることについて対策がとれるようなコーディング規約を決める必要がある。たとえばPHPであれば、使用する変数はすべて初期化するなどが挙げられる。
また、コーディング規約を適切に定めることで、メンテナンス性が向上し、結果的にバグの少ないコードを作成することが可能となる。
コードレビューを行うことで、コードに存在する問題を発見し、早期に対処することが可能。また、コードレビューだけでなくペアプログラミングという2人1組でコードを書くという手法もコーディング中のケアレスミスを防ぐことが可能となるので、脆弱性を防ぐには効果的だ。
テスト
最後にどういった点についてテストをするのか説明する。
脆弱性は意図していない動作をしてセキュリティ上の問題を発生させることなので、脆弱性の確認のためのテストでは、異常系の確認を行うことが主となる。先に述べたように、入力データの内容によってアプリケーションの動作をある程度制御できる。
また、HTTPはステートレスなプロトコルであるため、ウェブアプリケーションではページ単位で処理が行われる。このためページ遷移を無視して、処理を行わせることができる。