MSIE6 もう駄目かも
2003年12月18日(木曜日)
MSIE6 もう駄目かも
スターダストさんの 18日 (d.hatena.ne.jp)で触れられている MSIE の話、これまた強烈ですね。簡単に整理すると、
- HTML が javascript: スキームの URL を @import している場合、.mht で保存しようとすると保存できない、もしくは MSIE がフリーズ。
- HTML を .mht 形式で保存すると、気を利かせてか記述の一部が書き直される。これによって、サニタイズしたはずのものが「復活」する可能性がある。
- IE6 では、@import が @i で機能するのみならず、@import の後ろのいろんな文字 (たぶん [0-9a-zA-Z'"] にマッチしない全ての文字。制御文字も含む!) を無視する。
最初の奴ですが、スターダストさんの環境ではフリーズするとの報告。私の Windows XP + IE6 SP1 でもフリーズしました。「0%完了しました」と出たままの状態でプログレスバーが全く進まず、固まります。
キャンセルボタンを押しても全く反応なしで、二進も三進もいきません。いちおう、タスクマネージャから強制終了すると黙って終わってくれました。
どうして固まるのかは単純で、javascript: な URL のリソースを保存しようとしているからでしょう。img要素の src属性でやるとこうなります。
※……でも、ならないで src 属性が空になる場合があるような……。
ちなみに javascript: ではなく mailto: な URL で試してみたところ、フリーズはせず「保存できない」というダイアログが出ました。
二番目ですが、それはもう実にいろいろなものが書き換えられます。想像を絶しています。どうも .mht というのは単にページを保存するのではなく、メールに添付するための形式として保存するという主旨のようで、そのために書き換えていると思われる節もあるのですが……なんとも読み切れません。
いろいろやってみましたが、一番訳が分からないのが !iのテストを .mht で保存したときの挙動です。勝手に Transitional にされていたり、!i が片方だけ展開されているのも謎なんですが、末尾のアンカーが書き直されているのはどうして……(.mht で保存後、ソース表示してそのまま保存したもの)。
Microsoft の「[IE5]Web ページがアーカイブ ファイル (*.mht) 形式で保存できない (support.microsoft.com)」などを見ると、.mht で保存しているのは MSIE ではないように思えますので、MSIE とは別のパーサーが仕事をしているのかもしれません (generator を見ると MSHTML なんですが、MSIE は MSHTML を使っていない……?)。
ともかくこれによって、サニタイズしたつもりのものが .mht 保存によって「復活」する可能性があるわけです。具体的に何かマズいケースがあるのかどうかはまだ分かりません。要検証です。
そして三番目。これはありえない、ありえないよ……。
@import*<>!/-&%$).,;_^~#(=url(script.css);
こんなのがインポートされるはずがない、はずがない、はずがないんですが…… (でもインポートされちゃうテストぺージ。ちなみにスクリプト無効の場合は「中止」を押すまで固まってますので注意)。[a-zA-Z0-9"'] にマッチする文字を入れるとインポートされなくなります。BELL とかの制御文字でも OK (無視され、インポートされる)。
これはもう駄目かも……。
- 「MSIE6 もう駄目かも」へのコメント (9件)
関連する話題: UA / Internet Explorer / セキュリティ / Internet Explorer URL偽装問題
- 前(古い): いろいろ撮ってみる2
- 次(新しい): svchost.exe大フィーバー