用語「CSSXSS」について
CSSXSS (しーえすえすえっくすえすえす)
話題 : セキュリティ
cssText プロパティを利用して外部 HTML ファイルの内容を読み取る手法のこと、または、その手法を許してしまうセキュリティホールのことを指します。これは他ドメインの HTML が読めてしまうというブラウザのセキュリティホールであり、XSS とはあまり関係ありません。
cssText プロパティは、本来、外部 CSS ファイルの内容を得るのに使用するものです。MSIE では、
<link rel="stylesheet" type="text/css" href="http://example.com/style.css">
などとした上で、
<script type="text/javascript">
alert(document.styleSheets[0].cssText)
</script>
などとすると、style.css の内容を得ることができます。
※もう少し正確に述べると、style.css の内容を IE がパースした結果、IE が理解した宣言ブロックの内容が得られます。
ここで、上記サンプルの link 要素のリンク先を、CSS ではなく HTML にしてみます。たいていは何も得られないのですが、リンク先の HTML に {} が含まれていると、MSIE はそれを CSS としてパースし、cssText はその結果を返します。すると、
UNKNOWN{foo:bar}
などという内容が得られます。HTML の中に {} で囲まれた部分が存在すると、CSS の宣言ブロックとみなされるため、クロスドメインで参照できてしまうのです。ログイン状態でないと見られないはずの内容をも別ドメインから取得できてしまうおそれがあるので、非常に危険です。
対応策としては、スクリプトを無効にする一手です。
Web コンテンツ側では不用意に {} を出力しないようにすれば対応できますが、動的コンテンツで {} が出力されないことを保証することは難しいかもしれません。
- 「CSSXSS」にコメントを書く