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> |
の場合、JavaScriptとしてみた場合はXMLリテラルしか存在しませんので、以下のエラーが発生します。
target.html の内容が
var x=<html><body> |
の場合は、JavaScriptとしてみた場合はXMLリテラルだけでないため、Firefox 3.5および3.6でもHTMLをJavaScriptとして解釈し、関数theftが呼び出されるため、JavaScriptからHTML内の文字列にアクセスすることができます。
このようにFirefox 3.5以降では、<script>のsrcとして読み込む対象が一般的なHTMLおよびXMLであった場合にはJavaScriptとして解釈されないように変更されている一方で、XMLリテラル以外の文を含む通常のJavaScriptファイルはこれまでどおり解釈されるため、E4Xを利用した外部コンテンツののぞき見という攻撃に対して、大きな副作用なしに高い効果を上げる対策が取られたと考えてよいと思います。
Copyright © ITmedia, Inc. All Rights Reserved.