コメントアウトでJSON(P)のデータを守れるのだろうか

朝ごはんをたべていたら思いついたのでどんなものなのか皆さんに伺ってみたくなりました。


○クロスドメインアクセス対策例

JSONJSONPJavaScriptで機密情報を配信する場合、クロスドメインアクセスの対策(=クロスドメインアクセスを不可能にする対策)が必要になります。

以下にSea Surfers MLで議論されていた方法を紹介します。

(一部省略 by hoshikuzu)

方法2.while(1)、およびコメントアウト

サーバ側がデータの先頭にwhile(1) {}をつける、または全体をコメントアウトした状態で返し、クライアント側でこれを取り除いてevalする方法です。方法1と考え方としてはほとんど変わりません。while(1)の方法はGMailでも使われています。

ここでのコメントアウト法が果たして有効なのかどうか答えを知りたく思います。教えて君になっていますが、まことにすみません。
罠サイトがscript要素でJSONPデータを呼び出すさいに、charset属性において、utf-7を指定したらどうなるのでしょうか。utf-7の表現でコメントアウトを脱出することは可能なのでしょうか?たとえば、「*/」相当をutf-7表現であらかじめJSONPデータ内において汚染しておくなど。もとより、JSONPデータをutf-8指定で供給していれば問題ないかとは思いますけれど、なかには、iso-8859-1の上位に相当する文字セットで供給する場合もありえるのかなぁとか・・・
たぶん、hasegawayosukeさんが既に調べつくしているとは思いますが(舌。そのほか、いったんimg要素でキャッシュさせてonerrorでうみゅぅとかのKanatokoさん方式とか。

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ならばこそ、「等」という文言をつけて逃げてはいけません。

IEのstyle属性で奇妙な表現

エイプリルフール

四月馬鹿なんですよね。なので、以下には嘘がはいっているかもしれませんね。

Microsoft社発表によれば

実は本年1月からのIEの月例更新からひそかに、新しいstyle属性の拡張が毎月毎月次々に実装されているようです。今後もユーザエクスペリエンスの拡大にむけて毎月新機能が提供されるようです。たとえば、3月分では以下の表現が可能になりました。


style="バック責め:真っ赤なケツ"
日本語表現のstyle宣言などは明らかに新機軸であり、Microsoft社内で希望をつのって実装しているようです。中には、バックスタイル属性の実装の希望があったようですが、こちらはvalidでないので見送られたようです。これらの一連の拡張は、以下にのべる古くからあるハックの延長であるとのこと。面白いですね。

古くからあるstyle属性の表現

IEにだけ適用されるstyle属性の利用方法のCSSハックとして一部の好事家には知られていたようですが、以下の表現が可能です。


<input type=text value="hoehoe" style="<![background]>:red">