2011-07-28 8 views
5

私は、現在のページから任意のクエリ引数をリダイレクトする必要があります。Response.Redirect(Request.Url.AbsolutePath)は常に安全ですか?

私はちょうどResponse.Redirect()に渡すチケットを提供するように見えるRequest.Url.AbsolutePathを見つけました。

私の開発マシンでうまくいくようです。誰もがこのプロパティの値にリダイレクトする潜在的な問題を知っていますか?すべてのケースで「安全」であることを確認することは困難です。

答えて

2

あなたは「再書かれた」場合には、内部URLの問題である可能性があります。たとえば、ユーザーは "/team.aspx"を要求しますが、内部的には実行を転送したり、URLを "/page.aspx?id=137"として書き換えます。

個人的には、私はRequest.RawUrl(これは常にローカル)を使い、query-stringを取り除くことができます。

HTTPリダイレクトが絶対パス上のパス( "/ foo/bar")になる可能性があり、ブラウザがプロトコル、ポート、およびホスト名を保持するため、リクエストのホスト部分を取り除くことは問題になりません。

+0

私はあなたの最初の段落を何度も読みましたが、まだ分かりません。ユーザが '/ team.aspx'を要求した場合、' Request.Url.AbsolutePath'が '/ team.aspx'を返すと期待します。 '/page.aspx?id = 137'はどこから来たのですか? –

+0

@Marcelo - しかし、彼はURLを書き換えていません。 – JonH

+0

Jonathan、URLの任意の形式を使用すると、AbsolutePathのURLはRawUrlのURLと同じではありません。 RawUrlはHTTPリクエスト経由で送信されたもので、ユーザーがブラウザで見るものです。 –

0

私はRequest.Url.OriginalStringを使用します。

絶対パスはURLのホスト部分を削除します。

はこれを見てください:http://wdevs.blogspot.com/2009/03/url-properties-of-request-to-aspnet.html

+0

しかし、 'OriginalString'にはクエリ文字列が含まれています。私はそれを取り除くことができることを知っていますが、 'Request.Url.AbsolutePath'にリダイレクトすると何が問題になりますか?私が同じドメインにリダイレクトしている限り、問題を理解しているかどうかはわかりません。 –

+0

@ JOnathan Wood - あなたの投稿を誤解しています。そうです、あなたがしようとしていることに何の問題もありません。実際のクエリパラメータが必要ない場合は、 'Request.Url.AbsolutePath'を使用してください。 – JonH

関連する問題