ソフトウェアなどを使いこなすために,
IEのContent sniffing
通常,
たとえば,
リスト1 test.
#! /usr/bin/perl
print "<html><h1>hello, world</h1></html>"
同様の現象はtext/
おそらく,
先のリスト1の例では無害なHTMLタグが使われているだけですが,
この自動判別の挙動は,
- 注1)
- IE7.
0.5730. 13で動作検証しました。IE6でもおそらく同様ですが, 手元に動作検証できる環境がないため, 今回はIE7に絞って話を進めます。 - 注2)
- Content sningに関する情報は以下が充実しています。
URL:http://webblaze. cs. berkeley. edu/ 2009/ contentsniffing/
Content-Dispositionヘッダで解決?
前述した,
リスト2 Content-Dispositionヘッダ
Content-Disposition: attachment;
filename="foo.txt"
しかし,
危険性のあるテキストファイル
ところで,
- 注3)
- たとえば以下によると,
一部のIEのバージョンではテキストやHTMLの場合, Content-Disposition:attachmentが指定されていても, ブラウザ内で表示してしまったようです。
URL:http://support. microsoft. com/ kb/ 267991 - 注4)
- JavaScriptのhistory.
back()と組み合わせる攻撃法が知られています。 - 注5)
- ユーザがアップロードしたファイルなど。
- 注6)
- 以下によると,
IEはコンテンツの先頭の256バイトでコンテンツの種類を判別します。
URL:http://msdn. microsoft. com/ en-us/ library/ ms775147(VS. 85).aspx - 注7)
- RFC 2616の15.
5節 「Content-Disposition Issues」 より。
日本語ファイル名の問題
前節のリスト2で,
単純に考えると,
たとえば,
リスト3 日本語の文字そのまま
Content-Disposition: attachment;
filename=" あいう.txt"
日本語ファイル名とメールの世界
メールの世界でも,
先頭の=?UTF-8?B?は文字エンコーディングがUTF-8であること,
リスト4 よくあるエンコード
Content-Disposition: attachment;
filename="=?UTF-8?B?44GC44GE44GGLnR4dA==?="
実は,
メールの標準的に正しい方法はRFC 2231に則ったリスト5のような形式です。
リスト5 RFC 2231に則ったエンコード
Content-Disposition: attachment;
filename*=UTF-8''%E3%81%82%E3%81%84%E3%81%86.txt
しかし,
- 注8)
- 「5. Use of encoded-words in message headers」
の 「An'encoded-word' MUST NOT appear within a 'quotedstring'」 より。