XHTMLとJavaScriptエスケープについて

XSS対策としてのいわゆるJavaScriptエスケープについての拙なる論考を、当日記で以下に記載したことがあります。

http://d.hatena.ne.jp/hoshikuzu/20071011#p1

さて、商用などでウェブアプリケーションを作成する場合には、おそらくHTMLでページを出力し、ピュアなXHTMLでページを出力することはほとんどないかもしれません。ユーザがIEを使っている限り、ピュアなXHTMLとして読んでくれないからです。 対策としてHTTPのrequestを参照してブラウザごとの判断をしてきまじめにコンテンツネゴシエーションしているかもしれませんが、それはさておき。 ところで、IEが進化してピュアなXHTMLの解釈をしてくれる時代が来たとしましょう。ウェブアプリケーション側にも、XHTMLでページを出力する試みをするものが出てくるかもしれません。

そんな時代には、場合によっては、script要素内の文字列リテラルに関するエスケープ方法は、上のリンクで触れたような従来のやりかたでは駄目で、進化する必要が出てくることでしょう。「場合よっては」と書きましたが、script要素を記述するにあたって、CDATAのマーク区間であると明示しないケースが、多数派になりそうだからです。XHTMLの場合中はscript要素の中身は放置すれば#PCDATAなので、文字参照(数値文字参照、文字実体参照)された記述を、スクリプトエンジンに渡す前に展開してしまいます。試したい人は、簡単な静的なXHTMLページを作ってFirefoxOperaで。

現時点では上記の心配はしなくてもよいのですが、いずれ混乱する時代が来そうな気もします。

※とか、佐名木さんの新著を読んで思ったのでした。

※現時点でありえそうなのですが、ページのソース出力にあたってはXHTMLであるが、mimeタイプはtext/html というキメラに関しては、確か大丈夫だったかと思います。だめなケースがあったら是非教えてください。

JSONに関する妄想ばなし2

前回の当日記のJSONに関する妄想ばなしの記事において、Kanatokoさんからマジなコメントを頂いたみたいですので、補足を。


<body onload="alert(JSON.XMLDocument.parseError.srcText)" >

<script id="JSON" type="text/xml" src="ターゲットの外部jsfileのURL" >
</script>

</body>

IE対象のPoCは上記のとおりです。JSONデータを1行だけ抜けます。1行になっているケースも少なくないでしょう。データ量を節約して改行を省くからです。…PoCが悪さをするためには、OSとIEとのそれぞれのバージョンにおいて、セキュリティゾーンとゾーンごとの設定の既定値が大きく影響するはずです。また、ゾーンごとの設定を緩めていると危険かもしれません。パッチが最新でない場合も、危険性が増します。 これらを踏まえて、変わったベクタのひとつですが、ローカルにおかれたHTMLファイルから、mhtファイルへとリダイレクトやiframeなどで制御を移されると、mhtファイルのセキュリティゾーンが信頼済みサイトになるケースもあることでしょう。 また、罠サイト自体が、信頼済みサイトゾーンであっても危険でしょう。難しいことを考えずともローカルにおかれたHTMLファイルのスクリプトの実行を許すインターネットオプションをオンにしてしまっている企業とかもあるかもしれません。このときには好きなだけ…
PoCが有効になる理由は、クロスドメイン通信でのセキュリティガードが緩くなってしまうからです。

こまごまと申し上げましたが、上はすべてクライアント側の問題です。 クライアント側で最新最善の対策と注意をはからっていてくれればオーケーですが、それを期待してよいのかについてはおおいに疑問です。

サーバサイドでのウェブアプリケーションで取れる対策が複数あった場合に、コストがほぼ同じであれば、クライアント側を信頼しなくとも安全である対策を選択すべき…と主張する立場もよしとしなければなりません。

POST強制による対策はサーバ側だけで一律にコントロール可能ですから、ブラウザ側をあてにしなくとも良いという点でメリットを感じます。 また、未来においてブラウザ側の穴が出てきても、比較的に強靭であるはずです。

とか急に今あわてて考えてみました。Kanatokoさんからのマジコメントに感謝いたします。

※なお、ここまでのオハナシが依然として妄想なのです。なぜならば、XHRそのものが、セキュリティゾーンとその設定値に依存して危険だったりするという事態が考えられるのに、私は少しも調べずにここまでのオハナシをしているからです。