[ニッチ]E4Xで攻撃できる? できない?教科書に載らないWebアプリケーションセキュリティ(6)(2/3 ページ)

» 2010年02月08日 00時00分 公開
[はせがわようすけネットエージェント株式会社]

E4Xによるのぞき見を防止するFirefoxの改善

 Firefox 3.0ではわなの仕掛けられたサイト上で、<script src="http://example.jp/sns.html"></script>のように、外部サイトのコンテンツを読み込んだ場合、target.html内にXML処理命令<?xml ...>や文書型宣言<!DOCTYPE ...>が含まれていない場合には、E4Xの機能によりJavaScriptソースとして扱われていました。

 ところが、Firefox 3.5および3.6では、sns.htmlのコンテンツがXMLリテラルのみで構成されている場合はエラーとなり、E4Xとして扱うことができなくなっています。

 例えば、sns.html の内容が前述のように

<html><body>
<div>{theft("</div><div>ようこそ、川口さん!</div><div>")}</div>
</body></html>

の場合、JavaScriptとしてみた場合はXMLリテラルしか存在しませんので、以下のエラーが発生します。

図1 Firefox 3.6でのエラー 図1 Firefox 3.6でのエラー(クリックで拡大します)

 target.html の内容が

var x=<html><body>
<div>{theft("</div><div>ようこそ、川口さん!</div><div>")}</div>
</body></html>

の場合は、JavaScriptとしてみた場合はXMLリテラルだけでないため、Firefox 3.5および3.6でもHTMLをJavaScriptとして解釈し、関数theftが呼び出されるため、JavaScriptからHTML内の文字列にアクセスすることができます。

図2 Firefox 3.6ではHTML内の文字列をJavaScriptとして解釈する 図2 Firefox 3.6ではHTML内の文字列をJavaScriptとして解釈する

 このようにFirefox 3.5以降では、<script>のsrcとして読み込む対象が一般的なHTMLおよびXMLであった場合にはJavaScriptとして解釈されないように変更されている一方で、XMLリテラル以外の文を含む通常のJavaScriptファイルはこれまでどおり解釈されるため、E4Xを利用した外部コンテンツののぞき見という攻撃に対して、大きな副作用なしに高い効果を上げる対策が取られたと考えてよいと思います。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。