data スキーマを利用したクロスサイトスクリプティングに注意

RFC2397で定められている data スキーマを用いると、外部ファイルなしに、HTML 中に小さなデータを埋め込むことができます。例えば、RFC2397 では、img タグ内に data スキーマにより画像データを埋め込む例として、次のようなコードが挙げられています。

   <IMG
   SRC="data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw
   AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz
   ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp
   a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl
   ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis
   F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH
   hhx4dbgYKAAA7"
   ALT="Larry">

HTML タグを許容する Web アプリケーションにおいてサニタイズが不十分な場合、この data スキーマを悪用することにより、タグ内にスクリプトを挿入することが可能となります。
実際に、国内複数の Web アプリケーションにおいて data スキーマを利用した XSS が存在しましたので*1、Web アプリケーション開発者の方は注意しましょう。
ちなみに、IE は data スキーマをサポートしていないようですので、IE を使う限りはこの方法での XSS は発動しません。

*1:言うまでもなく、現在は修正済み