不正な Referer 対策
2003年5月8日(木曜日)
不正な Referer 対策
というわけで不正な Referer 対策。
ASP.NET では、Referer の値は System.Web.HttpRequest 型の Request というオブジェクトの UrlReferer プロパティにアクセスすることで得られます。プロパティの値は System.Uri 型です。つまり、Referer の値は ASP.NET の内部処理によっていったん System.Uri 型の値に変換されているわけです。
この変換は結構良くできていて、頭にスキームがなければ相対 URI とみなされるし、Referer に空白が含まれているような場合でも、勝手に %20 に変換してくれます。たいていの場合は何とかなるのですが、問題のケースでは括弧書きの中に URL が入っているのがまずいのか、Request.UrlReferrer の値を参照しようとした瞬間に System.UriFormatException が発生します。ToString() メソッドを呼ぼうとしても駄目ですし、null と比較しようとしただけでも駄目です。
しようがないので UrlReferer プロパティは封印して、代わりに Request.Headers["Referer"] で取得することに。これで何とかなる……といいなぁ。
- 「不正な Referer 対策」にコメントを書く
関連する話題: プログラミング / C# / ASP.NET / hatomaru.dll
- 前(古い): Refererの書式
- 次(新しい): 404応答