3.2 White List Input Validationしかし、長年このwhite listの意味が私には謎でした。というのは、引用した文に続いて、以下の文があるからです。
Input validation can be used to detect unauthorized input before it is passed to the SQL query. For more information please see the Input Validation Cheat Sheet.
【私訳】
3.2 ホワイトリスト入力値検証
SQLクエリに渡される前に無許可の入力値を検知するために入力バリデーションを用いることができます。詳細は、入力値検証チートシートを参照ください。
Validated data is not necessarily safe to insert into SQL queries via string building.ホワイトリストで検証した値が安全ではない、ですと?
【私訳】
バリデーションされたデータは、文字列組み立てを通じてSQLクエリに挿入する上では必ずしも安全ではありません。
しかし、このような文章は珍しくありません。以下は、OWASP Top 10 2016からA1-Injectionの解説です。
3. Positive or “white list” input validation is also recommended, but is not a complete defense as many applications require special characters in their input. If special characters are required, only approaches 1. and 2. above will make their use safe.
【私訳】 3.ポジティブ(いわゆる「ホワイトリスト」)入力値検証も推奨されますが、 多くのアプリケーションが特殊文字の入力を必要とするため、完全な防御ではありません。特殊文字が要求される場合、上述の1.と2.(訳注: 安全なAPIの使用とエスケープ処理)のみにより、特殊文字の使用が安全になります。
このような用例から、私は英語圏のウェブアプリケーションセキュリティに関する文書では、white listの定義は「アプリケーションが許可した入力値」、もっと言えば「アプリケーションの入力値に対する仕様」であると解釈するしかないと考えるに至りました。このあたり、海外のドキュメントに対する知識が豊富というわけではないので、私の理解が間違いであればご指摘下さい。
しかし、この定義は私の「ホワイトリスト」の語感とは異なります。ホワイトリストというからには、
ホワイト = 安全
リスト = 列挙されたもの
であるはずであり、「安全な値の列挙」がホワイトリストの定義だと思うからです。そして、用語辞典でのホワイトリストの定義もそのようになっています。
しかし、この定義は私の「ホワイトリスト」の語感とは異なります。ホワイトリストというからには、
ホワイト = 安全
リスト = 列挙されたもの
であるはずであり、「安全な値の列挙」がホワイトリストの定義だと思うからです。そして、用語辞典でのホワイトリストの定義もそのようになっています。
ホワイトリストとは、警戒する必要のない対象の一覧表のこと。対義語はブラックリスト。
ホワイトリスト - Wikipedia より引用
ホワイトリストとは、対象を選別して受け入れたり拒絶したりする仕組みの一つで、受け入れる対象を列挙した目録を作り、そこに載っていないものは拒絶する方式。また、そのような目録のこと。対義語は「ブラックリスト」(black list)で、目録に載っているものだけを拒絶し、それ以外は受け入れる方式である。私の語感や用語集での意味は上記の通りだとしても、日本のウェブアプリケーション開発者の語感はどうだろう、それを知りたいと思うようになりました。そこで、簡易な調査ではありますが、Twitter上で以下の選択肢によるホワイトリストに対するアンケートを実施しました。
ホワイトリストとは|ホワイトリスティング|white list|WL - 意味/定義 : IT用語辞典 から引用
- 許可された入力値をリストとして列挙したもの
- 入力値が安全になるように文字種等を制限したもの
- 入力値に対するアプリケーションの仕様
- その他(よろしければメンションで教えて下さい)
ウェブアプリケーション開発において、「ホワイトリスト」という用語をどの意味で使いますか?— 徳丸 浩 (@ockeghem) 2016年3月15日
ということで、私の語感は、日本の多くのウェブアプリケーション開発者と共通しているようだと考えました。
このエントリの結論は下記のとおりです。
- ウェブアプリケーションの分野で、日本語の「ホワイトリスト」と英語の"White List"では、用法に違いが見られる
- ホワイトリスト=アプリケーション仕様という意味だと、どんな場合にでも使えるが、必ずしも安全ではない
- ホワイトリスト=許可リストという意味だと、使える局面は限定されるか、安全なものとして扱える
- 両者の意味を混同することは危険である
- 「ホワイトリスト」という用語が出てきたら、警戒心をもって、どのような意味かを深読みしよう
参考: 僕が「ホワイトリスト」を採用しなかった訳
【HASHコンサルティング広告】
HASHコンサルティング株式会社は、ウェブアプリケーションのセキュリティに関心のあるセキュリティエンジニアを募集しています。
興味のある方は、twitterやfacebookのメッセージ、あるいは問い合わせページからお問い合わせください。
0 件のコメント:
コメントを投稿