■
■Opera8.51(Build7712)でjavascript擬似スキームの偽装が可能
Opera8.51で確認しましたが、それより若いversionでも恐らくは同様かと思います。各要素のstyle属性においてurl()を記述することがあります。bakgroundに画像等を利用したい場合に登場します。本日、出先で確認したところ、url()の【中身】において、バックスラッシュを1文字と、Dを一文字とを連続して記述した場合に、その連続した2文字がOperaによって無視される、という実装があることがわかりました。なお、スタイル要素内でも、この現象を確認出来ました。IEやFirefoxでは現象は確認出来ませんでした。IEでは現象は確認出来ませんでした。Firefoxではちょっと工夫すると可能なようです。本日の日記に追記しました。サンプルを以下に。
<input style="background:url('javascri\Dpt:alert(99)')" />
<style> input { background: url('javascri\Dpt:alert(00)'); } </style> <input type=text value="red">
\D は、おそらくスタイルシートの強制改行を意識しているものと思われます。標準仕様にもある \A の類推でしょうか。標準では \D は改行であると考えなくても良いはずなのですが、どうだったでしょうか。ちょっと調べた限りでは \D が url() の中身でだけで有効であるようにも見えます。この理由が思い当たりませんが、
javasc ript:
のようなものが有効だったりする例もなくはないので……まぁOperaが恣意的に設定している仕様なのだろうなあと思っています。バックスラッシュによるスタイル内のエンコードを真っ先に解決し、その後、url()の中身を解釈するにあたって、、改行が……ということなのでしょうか。
擬似スキームを取り除くにあたって、スタイル周りでバックスラッシュを意識している、私見では優秀な、某フィルターを上記例が貫通してしまいましたので、この日記にもメモしておきます。某フィルターのメンテナンス作成者には連絡済です。ちなむと、はてなの各サービスでは大丈夫のはずです。
■追記:Firefox/1.0.7でjavascript擬似スキームの偽装が可能
上の記事を書いた後に再確認をしていましたらFirefox 1.0.7 [Mozilla/5.0 (Windows; U; Windows NT 5.1; ja-JP; rv:1.7.12) Gecko/20050919] で、スタイル要素にて全く同じ現象を確認しました。ちょっと時間が切迫していますのでスタイル属性周辺の検査が充分には出来ていません……とほほ
<style> input { background: url('javascri\Dpt:/*/**/(function a(){alert(99)})()'); } </style> <input type="text" value="red">
コメント(/**/)をつっこむことでFirefoxでも作動してしまいました。う〜ん。\Dの意味がよくわからなかったりします。コメントを取り除くとFirefoxでは、正規表現が閉じていないよというエラーになるようです。JavaScriptも正規表現も知らない私。\Dって何?単なるキャリッジリターンぢゃあないのでしょうか?不思議です。どこかによいリファレンスはないでしょうか。
それはともかく、CSSHack(XSSHackではありません)の各サイトにはこの種のものがなさそうなのですよね。
■ブラウザの振り分け(役に立たないけど)
アンテナで金床さんのところのBBSをちょっと見ました。
<script\"src=…省略…></script>
これがFirefoxで動くなんて。そこで思い出したのが以下の例。
<img alt="xss" /src = "javascript:(function xss(){alert('Internet Explorer')})()" src/ = "javascript:(function xss(){alert('Firefox')})()" src = "javascript:(function xss(){alert('Opera etc')})()" title="finding browser" >
というわけで、スラッシュの取り扱いがWin上の3大ブラウザでバラバラということなのです。えへへ。振り分けとしては役に立ちません。スペースを記述出来ない時にどうすればよいのかということで頭をひねった時の産物です【謎】。
■近況
なかなかネットに接続できる余裕が取れません。せつないです。次の接続はいつになることやら……