検査方法
CSRFの検査は、実際にセッションが有効な状態で、実際に処理を実行するリクエストを送信し、想定どおり処理が行われているかどうかを確認することだ。先の例であれば、ログインしている状態で、リクエストdを送信し、パスワードの変更や商品の購入などの処理が行われているかどうかを確認します。これらの処理が行われている場合、脆弱性があると判断できます。
対策
CSRF対策の基本は、実際に処理を行うリクエスト(例ではリクエストdとなる)が、ユーザーが意図したとおりに行われたものかどうかをアプリケーションで判断することだ。その判断は、攻撃者が推測できない情報をリクエストに付加することで可能になる。具体的には、以下のいずれかを正しく行うことだ。
詳細については、「開発者のための正しいCSRF対策」に詳しく書かれている。
1. ワンタイムトークンを使用する。
2. パスワード認証を行う。
3. CAPTCHAを使用する。
今回までは、よく発見される脆弱性について検査方法を説明してきた。安全なアプリケーションかどうかを判断するには、全てのパラメータ、URLに対して、今回までに説明した方法でひとつずつ脆弱性の検査を実施する必要がある。
たとえば、10個のURLと各URLにパラメータが10個ずつあるとすると、10×10=100個の検査をひとつの検査パターンについて実施しなければならない。このため、検査パターンが10個(検査パターンはURLエンコードなどを含めると非常に多く存在します)あったとすると、100×10=1000パターンの検査を実施しなければならないため、人の手による検査では非常にコストがかかってしまう。
そこで、検査コストを抑えるために、AppScanのような自動検査ツールが必要になる。次回は、AppScanを例とした自動検査ツールによる検査手法について説明する。