IPA ISEC セキュア・プログラミング講座:Webアプリケーション編 第7章 エコーバック対策:スクリプト注入: #1 対策


要注意箇所への出力を行う必要に迫られている場合

そのような場合は、値を書き出す箇所への文字列埋め込みを慎重に行う。具体的には、次のような対策を行う。

対策内容

(hoshikuzuにより省略)

style、イベントハンドラ、<script>...</script>の内側

次の箇所にプログラムから動的に値を与える場合、

その埋め込む値に次のような、スタイルの構文あるいはJavaScriptの構文として意味をもつ特殊記号が含まれないようにする。

  • 引用符(「'」「"」「`」)
  • セミコロン(「;」)
  • コロン(「:」)
  • 括弧(「(」「)」)等

上記引用中の「等」というのが泣かせますね。

<script>...</script>の内側において、「\uXXXX」だけで記述可能なブラウザがある。(Firefox

引用符抜きで攻撃が成立している実例もあります。他の記号の抑制によって防止可能かもしれませんが私には自信がありません。

style属性の値において、コロンを使わずにいけちゃう場合があります。background=red とか。括弧の抑制でyabaiおは防止できるかもですが私にはとても自信がありません。

Operaイベントハンドラにおいて、2重に文字参照をかけておいてさえJavaScriptが作動してしまうケース(xhtml)がある。これに気がつかないと特殊な記号とやらを見落とす可能性がある。

ちょっと思いついただけで以上のような嫌なケースがあります。ですので、中途半端なブラックリストを推奨するのは良くないと思うのです。IPAが言っているとおりに愚直にブラックリストで対策を施したつもりのサイトが出ては困ります。

開発者は。変な要求仕様があったとしたら、まずはそれを断る勇気が必要ですし、断れないならホワイトリストでもって安全性を確保すべきでしょう。・・・そしてIPAホワイトリストを提供できないならば、次の箇所にプログラムから動的に値を与える場合ブラックリスト推奨による説明を放棄すべきです。「こういうところに文字列をつっこませてはいけない」と単純に言えば良いのです。…上記記事にあるのですが、


具体的には、次のような対策を行う。

言ってはいけないのです。IPAが推奨している具体的な対策ならばキットアンゼンなのだろう・・・と思い、それを鵜呑みにしてしまうからです。IPAならばこそ、「等」という文言をつけて逃げてはいけません。