ikepyonのだめ人間日記

セキュリティに関することを書いていく予定。

Tipsと考え方とXSS対策

http://blog.goo.ne.jp/t_iwano/e/b8850d157baab2e7382e5f4edf15ee0a
とか、
http://d.hatena.ne.jp/ockeghem/20070510/1178813849
とか見て思ったんだけど、本質を見極めてないと、対策に漏れが発生するよなぁと。
つまり、XSS対策はエスケープさえしておけばOKとかいうTips的な対策をとっていると、状況によっては漏れが発生するよねぇ。ま、これはXSS対策だけにとどまらないけど。
徳丸さんの対策は、多くのケースにおいては正しいけど、レアなケースにおいてはこれだけではダメだったりする。当然徳丸さんは理解していると思うけど。
例えば、こんな場合。

  <input type= text onmouseclick="javascript:location='入力データ';">

あるいは、こんな場合。

  <script>alert("hoge" + 入力データ + "hogehoge");</script>

どちらも、単純なエスケープだけでは対応できなかったりが難しかったりする。しかし、これらのケースの場合、XSSが何故起こるか?ということが分かっていれば、対策が取れるし、こういったつくりは危険だということが分かるかと。
Tipsだけでなく、物事の本質を見極め、何が危険で、何が安全なのかということを考える必要があると思う。
言っちまえば、今言われている、エスケープ処理も、入力データの妥当性検証の内容も多くの場合に適用できるTipsに過ぎない。

本当に安全にしようと思ったら、本質を理解し、少しでも危険が少なくなるような設計が必要になると思う。
でないと、今度はエスケープ処理が今のサニタイズという言葉に取って代わるだけじゃないかなぁ?