From: takagi.hiromitsu@aist.go.jp ("TAKAGI, Hiromitsu" )
To: java-house-brewers@java-house.etl.go.jp
Message-ID: <20011219152246.24B2.TAKAGI.HIROMITSU@aist.go.jp>
Date: Wed, 19 Dec 2001 15:57:46 JST

[JavaHouse-Brewers:47795] Content-Type: text/plain なページ におけるクロスサイトスクリプティ ング

[Prev][Next] | [Threads][Index] | [Search][Topics]
サーバーサイド開発といえば今やJavaなわけですが、

クロスサイトスクリプティング問題は、動的なHTMLページを生成する際にだけ
問題となると考えられていると思いますが、

プレインテキストを出力する(つもりの)場合にも問題になるので注意が必要
です。

これは、Content-Type: text/plain を指定したページであっても、ページの
冒頭数百バイト中にHTMLっぽいタグが含まれていると、Internet Explorerが
勝手にそれをHTMLとして表示してしまうところに問題の原因があります。

例えばこんなServletはありがちだと思います。

public void service(HttpServletRequest req, HttpServletResponse res)
    throws ServletException,IOException
{
    Writer w = new OutputStreamWriter(res.getOutputStream());
    ...
    res.setContentType("text/plain");
    w.write("Referer: " + req.getHeader("Referer") + br);
    w.write("User-Agent: " + req.getHeader("User-Agent") + br);
    w.write("Accept-Language: " + req.getHeader("Accept-Language") +br);
    ...
}

外部から与えられる文字列に、例えば

    <S>test</S>
    
を与えて試してみると、この程度では Internet ExplorerはHTMLと解釈せず、
そのままプレインテキストとして表示されるのですが、与える文字列を、

    <HTML><S>test</S></HTML>
    
などとしてみると、ページ全体がHTMLとして表示されてしまう現象を観察でき
ると思います。

    <HTML><SCRIPT>....</SCRIPT></HTML>

などを与えられるとcookieが漏洩することになる(そのサイトでcookieを発行
している場合)ので注意が必要です。


Netscape 4および 6ではこの問題は生じません。必ず Content-Type: に従う
ためです。

この問題は、Content-Type: を無視して余計なお世話な独善的判断をする
Internet Explorerの欠陥に諸悪の根源があると言えます。Microsoftはこの
欠陥を修正するべきだと思いますが、彼らのこれまでの所業と、彼らの技術
者としての人間性の特殊性からして、けっして直すことはしないだろうと考
えられます。(安全性よりも互換性、機能性を重視する。)

Intenet Explorerが出回っている現実がある以上、サーバサイド開発者側で
回避策をとらせざるを得ない状況だと思います。


対策方法についてですが、

HTMLを出力する場合のクロスサイトスクリプティング対策では、一般に、
「<」→「&lt;」といったエスケープ処理を施すわけですが、Content-Typeが
text/plain の場合にこれをするのは、(安全にはなるけれど)技術的に不自
然になってしまいます。プレインテキストと表示される場合に、「<」などの
文字が「&lt;」と画面に表示されるのは変です。

となると、自然な回避策が無いように思われます。

私が考える解決策は、

  Content-Type: text/plain な動的ページは一切作らない。
  (動的ページを作るときはすべて Content-Type: text/html にする。)
  (もちろん、静的なページならば Content-Type: text/plain でもよい。)

というものです。

いかがでしょうか、どなたか他にアイデアはありますでしょうか。


高木 浩光@独立行政法人産業技術総合研究所
http://staff.aist.go.jp/takagi.hiromitsu/


[Prev][Next] | [Threads][Index] | [Search][Topics]
Follow-ups:
047799 hoda@tail.gr.jp (SAWADA Hodaka )
048575 t_you@hkg.odn.ne.jp ("Y.Tsuji" )