ホワイトリストについてしつこく考えていて、一応の整理がついてきたのですか、ブログにするほど皆様も興味がないでしょうから、twitterで気ままにつぶやくことにします。
2016-03-24 17:23:40まず、ホワイトリストが、何についてホワイトであるかを明確にする必要があります。ウェブアプリケーションのバリデーションの文脈でホワイトリストという場合には、アプリケーションの仕様に対してホワイトなのか、攻撃等に対して安全というホワイトなのかを明示する必要があります
2016-03-24 17:28:59僕が一々ホワイトリストに目くじらを立てるのは、実際にはアプリケーション仕様に対してホワイトであるのに、「ホワイトリスト=非常に安全なもの」というイメージを悪用しているのではないか、という疑問を持っているからです
2016-03-24 17:30:10バリデーションから一旦離れますと、「非常に安全なもの」というホワイトリストもあります。例えば、特定のユーザのみに接続を許す場合にリモートIPアドレスの制限をかける場合がありますが、このIPアドレスの一覧は一般にホワイトリストと呼ばれます
2016-03-24 17:31:29しかし、アプリケーションの仕様を元としたホワイトリストは、攻撃等に安全とは限りません。英数字のみを許すような場合は通常安全です(例外あり)が、「印刷可能文字256文字以下」という仕様だと、多くの攻撃に対して安全とはいえません
2016-03-24 17:33:02何に対してホワイトであるかを明示する確実な方法は、ホワイトリストという言葉を使わないことです。その辺りは、こちらの記事に書きました "僕が「ホワイトリスト」を採用しなかった訳" d.hatena.ne.jp/ockeghem/20110…
2016-03-24 17:34:28次に、リストというからには「列挙したもの」でないかという疑問があります。正規表現で表されたようなものを「リスト」と呼んでよいかという疑問です。言葉は生き物なのであまり目くじらを立てても仕方ないのかもしれませんが、私は、リストという言葉は列挙できるものだけに使いたい感覚があります
2016-03-24 17:36:14次に、ホワイトリストとブラックリストに対して、「グレーゾーン」の存在を考えたいところです。さまざまな入力の攻撃性について考えると、あきらかに安全なもの(ホワイト)と、あきからな攻撃(ブラック)がありますが、実は大半の入力はグレーとしか判断できません。だから判定が難しいわけです
2016-03-24 17:38:10アプリケーションの仕様をホワイトリストとして定義したとして、仕様を満たさないものはすべてブラックです。グレーゾーンはありません。したがって、ホワイトリストの裏返しがブラックリストであり、両者は表裏一体の関係にあります
2016-03-24 17:39:33これに対して、攻撃やウイルス等を考える場合、明らかに安全なもの(ホワイト)、グレーなもの、明らかなウイルスや攻撃(ブラック)があります。この場合ホワイトとブラックは表裏一体ではなく、どちらを採用するかは注意深い選択が必要です
2016-03-24 17:40:55ウイルス対策ソフトやWAF(ウェブアプリケーションファイアウオール)の多くがブラックリスト(シグネチャ)方式を採用しているのは、ホワイトリストの適用が現実的には難しいからです。
2016-03-24 17:41:53これに対して、アプリケーションのバリデーションを仕様のブラックリストではなくホワイトリストで実現せよという場合、両者は表裏一体なので、本来どちらでもよいはずです。ホワイトリストを推奨する理由は、漏れなどが少なくできるからでしょう。根源的な違いが両者にあるとは思えません
2016-03-24 17:43:46goto有害論が有名ですが、その他の有害論として「else有害論」を聞いたことがあります。「その他の場合」と書くのではなく、一々明示しろというのです。bが正の場合bを掛けて、その他の場合bで割るというプログラムはゼロ除算の可能性があり、b <= 0の場合と書くと見落としにくい
2016-03-24 17:51:45それと同じような感覚で、ブラックリストには見落としが発生しやすいのでホワイトリストで(禁止条件ではなく許可条件で)表現しろということなのだと思います。そこに異論はありませんが、ホワイト「リスト」ではないのでは、と個人的には思います。
2016-03-24 17:54:11OWASP Top 10などで、「 Positive or “white list” input validation」という書き方がしてあります。while listをクォートしているのは、「いわゆるホワイトリストというやつね」というニュアンスではないかと個人的には考えます
2016-03-24 17:56:42しかし、単に Positive input validation だと、Positiveって何だ? ということになりかねないので、"white list"を併記しているのでしょう…これは、分かりやすい文章を書く努力を放棄している、文章作成上の怠慢ではないかと思うわけですね
2016-03-24 17:58:59