今回の検証では,二つの仕組みのうち,ブラックリストに注目した。ブラックリストがしっかりしていないと,最近被害が頻発しているような攻撃には対処できないと筆者は考えているからだ。検証結果を評価する上で重要な部分なので,まずここを詳しく解説したい。

ホワイトリストでは守り切れない

 図2に示したような入力フォームを処理するWebアプリケーションを使って説明しよう。入力フォームには,性別,郵便番号,コメントの入力欄がある。個人の簡単な属性と感想などを書き込んでもらうという,ECサイトなどで一般的な入力画面だ。

図2●最後のとりでになるブラックリストを検証
ホワイトリストでは守り切れない自由記入欄などの入力はブラックリストで防御する必要があるが,ブラックリストには検知漏れと過剰検知(紛らわしい入力を攻撃と勘違いする)の可能性がある。今回そこを検証した
[画像のクリックで拡大表示]

 ホワイトリストは,入力できる文字が限られている入力フォームで効果を発揮する。図2では,性別と郵便番号の入力欄で有効だ。郵便番号欄は,7ケタの数値以外は無効であり,性別欄は男性・女性を示す文字注1だけが許容される。ホワイトリストでは,これらの「正しい入力」を入力欄ごとに指定しておき,それ以外の入力をエラーにする。文字の種類(英字,数字など)や文字数などを制限でき,入力フォームやCookieの入力値を対象にできる。

 ホワイトリストで入力値を制限できれば,多くの攻撃の遮断が可能だ。数値だけに限定すれば,ほぼ攻撃は不可能になる。英字を許した場合でも,「'」などの特殊文字を禁止にできれば,可能な攻撃は限られる。文字数を短く限定できれば,さらに安全になる。

 ただし,ホワイトリストには,すべての入力値には適用できないという制限がある。図2の例では,自由な記入が可能なコメント欄には対応しづらい。前述のように,Webサイトを狙う犯罪者はツールを使い,無差別にWebページを調べて脆弱性のある入力フォームなどを探す。ホワイトリストで守れない入力フォームに脆弱性が一つでもあれば,そこから不正アクセスされてしまう。