HttpHandler で Bad Request の謎
2007年7月27日(金曜日)
HttpHandler で Bad Request の謎
「アマ検」を作ってみたのですが、いろいろ検索してみると、「"」や「<」を含む文字列を検索すると死亡するという問題がありました。どうも HttpHandler を使っている場合、パスに特定の文字列が含まれていると例外が出たり、Bad Request と言われて怒られたりするようです。
ただし、クエリの場合はそれらの文字が含まれていても平気です。「http://bakera.jp/amazon/books/%22」はダメですが、「http://bakera.jp/amazon/books?%22」だと OK なのです。考えてみれば、「"」や「<」は、Windows のファイルシステムでパス名に使用できない文字ですから、HttpHandler はどこかでパスをファイル名にマッピングしようとしていて、ファイル名に使えない文字に当たると死んでしまうのかもしれません。
そこで、検索文字列にパス名として使えない文字が含まれている場合には、それがパスの一部ではなくクエリ文字列として渡るように改造しました。これで、「"」や「<」が含まれる文字列も検索できるようになりました。
※ちなみに、「パス名に使えない文字」は System.IO.Path.GetInvalidPathChar() で取得しています。
これで解決……と、思いきや。いろいろ試してみると、何故か「&」や「%」でも死亡するのでした。これらはパス名に使える文字なので、単純に「パス名として不正だから死ぬ」という訳でもないようですね。
※追記: なんかいろいろ駄目なので元に戻しました。orz アマ検は停止中です。
- 「HttpHandler で Bad Request の謎」にコメントを書く
関連する話題: ASP.NET / C# / hatomaru.dll / 失敗談
- 前(古い): SCRIPTタグ
- 次(新しい): RSSで任意のドメインに誘導されてしまう脆弱性