- 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を出力する場合のクロスサイトスクリプティング対策では、一般に、
「<」→「<」といったエスケープ処理を施すわけですが、Content-Typeが
text/plain の場合にこれをするのは、(安全にはなるけれど)技術的に不自
然になってしまいます。プレインテキストと表示される場合に、「<」などの
文字が「<」と画面に表示されるのは変です。
となると、自然な回避策が無いように思われます。
私が考える解決策は、
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" )