Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Namazu v2.0.7 にクロスサイトスクリプティング脆弱性
On Sun, 25 Nov 2001 21:22:34 +0900
"Yoshinori TAKESAKO" <takesako@xxxxxxxxx> wrote:
> * Cross-Site Scripting 脆弱性に関する修正
> http://cvs.namazu.org/namazu/src/output.c.diff?r1=1.80.4.5&r2=1.80.4.6
> 問題のご指摘どうもありがとうございました。>高木さん
> よろしければ、修正内容のご確認をお願いできればと思っております。
先ほどは、
| 一般に、「"」で括る部分に文字列を挿入して出力する場合には、その文脈で
| は文字「"」はメタキャラクタなのであり、「"」などにエスケープする
| 必要があります。
と述べたのでしたが、その後再考したところ、この個所については、URLの一
部分を出力する個所なので、URLエンコードする、つまり「"」を「%22」に変
換する方が(意味的には)適切かもしれません。
きっちりやろうとすると、一度、QUERY_STRINGをパラメタごとに分解して、パ
ラメタの値ごとにURLエンコードし、組み立てなおすのが最も正しいですが、
それは面倒なことになりますね…。
(QUERY_STRINGで意味を持つ記号である)「&」「=」「+」と「%」、それ以外
の全部の記号(のうちURLエンコードすべき記号)を「%」でエンコードしなお
す、というのが単純かつ確実かもしれません。
***
…と書いているうちに、やっぱり「"」でいいような気もしてきました。
ソースを拝見したのですが、この部分は、外部から与えられた QUERY_STRING
をそのまま引き継ぐように渡しているわけですね。プログラムが生成した正常
な query ならば、「%」エンコードは正しくされているはずで、それをそのま
ま渡せばよく、今回のように「不正に」与えられた query の場合には、元々
不正なので「%」エンコードの必要は無いと。その代わり、「"」で括っている
のだから「"」に変換するということで、セキュリティ的には解決と。
独り言のようですみません。最近、この種の処理をどのようにするのが最も適
切なのかを考えているところです。おそらく、
1. URLを生成する個所では、値に対して「%」エンコードを施す。
2. 「"」「'」などの引用符で括った中身を出力中は、その引用符をエスケー
プする。
3. 引用符の外では、「<」「>」「&」を「<」「>」「&」に変換
する。
という手順をこの順で全部施すのが正しいかもしれません。1を施せば2, 3は
セキュリティ的には冗長な処理ですが、ロジックとしては全部やるのが正しい
ように思います。
***
> このセキュリティ上の問題を修正した namazu 2.0.8 リリースの
> 準備に早速取り掛かりたいと思うのですが、よろしいでしょうか?
外野からのコメントですが、他にも同様の問題が残っているかもしれませんの
で、ゆっくり、一度、全体を再確認なさった方がよいかもしれないと思います。
高木 浩光@独立行政法人産業技術総合研究所
http://staff.aist.go.jp/takagi.hiromitsu/