ha.ckers.org web application security lab - Archive » Additional Non Alpha Non Digit Character Evasion

script の後ろにゴミを付け加えて、"<script" + XX + ">" のような表記にしてもスクリプトが動作する。XX に指定可能な文字は、IE6 では 0x00、0x09、0x0B、0x0C、0x20、0x2F。Firefox 1.5.0.7 では 0x08、0x09、0x20 となっている。というお話。
もう少し説明すると、IEでは 0x00 は完全に無視されますので、0x00 's' 0x00 'c' 0x00 'r' 0x00 'i' 0x00 'p' 0x00 't' のような表記でもスクリプトは動作します。また、0x0B や 0x0C はスペースと同意に扱われるようです。これらの応用としては、上記記事で挙げられている "script" の後ろに付け加えられるという例よりは

<div (0x0B)onmouseover="...">

のようなイベントハンドラの記述への適用のほうが、XSSする対象は多いのではないかと思います。危険なタグや属性をブラックリスト方式で検出している場合にはおそらく検出漏れが発生するでしょうから。
ちなみに、このようにイベントハンドラの検出を困難にする方法の例としては以下のようなものなどもあります。

<div /*anystring-non-equal*/onclick="..."> IE
<div /onclick="..."> IE
<div anystring-non-equal/onclick="..."> IE
<div onmousemove/onclick="..."> IE
<div style=""onclick=""> Firefox、IE
<div/''onmouseover='...'> Firefox
<div onmouseover/="..."> Firefox
<div/''onmouseover//="..."> Firefox
<div///onmouseover="..."> IE

さらに、0x00 のようにブラウザによって特殊な扱いを受けるキャラクタは、エンコーディングによっても変化する可能性があります。
Webアプリケーションにおいては、ブラックリスト方式でこれらを検出・除去するのは非常に困難ですので、ホワイトリスト方式で対応するようにしましょう。