検索
連載

[柔軟すぎる]IEのCSS解釈で起こるXSS教科書に載らないWebアプリケーションセキュリティ(3)(2/3 ページ)

XSSにCSRFにSQLインジェクションにディレクトリトラバーサル……Webアプリケーションのプログラマが知っておくべき脆弱性はいっぱいあります。そこで本連載では、そのようなメジャーなもの“以外”も掘り下げていきます (編集部)

PC用表示 関連情報
Share
Tweet
LINE
Hatena

IEにおけるスタイルシートの“柔軟過ぎる”解釈

 さきに示したような攻撃を防ぐため、スタイルシートを許容するようなWebアプリケーションでは、HTMLだけでなくスタイルシート部分についても、安全な内容を生成するように注意しなければなりません。

 ところが、IEは残念なことに、スタイルシートの解釈が非常にあいまいです。そのため、単純に「expression」という表記をフィルタリングするだけでは、XSSを防ぐことができません。

 例えば、以下のような記述では、すべてJavaScriptを実行してしまいます。

「expression」表記方法

(1)通常の表記



<div style="left:expression( alert('xss') )">



(2)コメントの挿入



<div style="left:exp/* */ression( alert('xss') )">



(3)バックスラッシュによるコードポイント指定



<div style="left:\0065\0078pression( alert('xss') )">



(4)数値文字参照



<div style="left:&#x0065;xpression( alert('xss') )">
(インラインでのスタイル定義では、数値文字参照が利用可能)



 これらに加えて、IE6では以下の記述であってもスクリプトが動作します。

「expression」表記方法(IE6の場合)

(5)全角文字



<div style="left:expression( alert('xss') )">



(6)特定のUnicode文字



<div style="left:expessio( alert('xss') )">
(R は U+0280、N は U+0274 または U+207F が利用可能)



 もちろん、(1)から(6)の記述は組み合わせて書くこともできるため

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

という表記でもJavaScriptは動きます。また、IE6では「expression」以外にも

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

のように、URLとしてjavascriptスキームを記述した場合にもスクリプトを動作させられます。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る