0

非常に奇妙なことに出くわしたばかりですが、同じ問題を抱えている他の人のインターウェブについては何も言及されていません。

ASP.NETアプリケーションを二重エンコードされたURLでヒットRequest["myQueryParam"]すると、クエリの二重デコードが実行されます。正当な理由でクエリ文字列を二重にエンコードしたため、これは望ましくありません。

他の人は私が明らかに間違ったことをしていないこと、そしてなぜこれが起こるのかを確認できますか?厄介なクエリ文字列の解析を行わずに、それを防ぐための解決策も素晴らしいでしょう!

たとえば、URLをヒットした場合: http:// localhost / MyApp?originalUrl = http%3a%2f%2flocalhost%2fAction%2fRedirect%3fUrl%3d%252fsomeUrl%253futm_medium%253dabc%2526utm_source%253dabc%2526utm_campaign%253dabc

(参考までに%25は%記号です)

次にRequest["originalUrl"]、返される文字列(ページまたはコントローラー)を確認します。

http:// localhost / Action / Redirect?Url = / someUrl?utm_medium = abc&utm_source = abc&utm_campaign = abc

私は期待します:

http:// localhost / Action / Redirect?Url =%2fsomeUrl%3futm_medium%3dabc%26utm_source%3dabc%26utm_campaign%3dabc

また、Fiddlerをチェックインしましたが、URLがサーバーに正しく渡されています(原因の1つは、送信前にURLをデコードしているブラウザーである可能性があります)。

4

2 に答える 2

4

HttpRequest によるエンコードされたパラメーターの処理は壊れていません。

実際、ハイパーリンクとしても、アドレス バーからの直接のナビゲーションとしても、リクエストで「期待される」結果が得られます。

<a href="WebForm1.aspx?originalUrl=http%3a%2f%2flocalhost%2fAction%2fRedirect%3fUrl%3d%252fsomeUrl%253futm_medium%253dabc%2526utm_source%253dabc%2526utm_campaign%253dabc">HEY</a>

WebForm1.aspx?originalUrl=http%3a%2f%2flocalhost%2fAction%2fRedirect%3fUrl%3d%252fsomeUrl%253futm_medium%253dabc%2526utm_source%253dabc%2526utm_campaign%253dabc

結果: http://localhost/Action/Redirect?Url=%2fsomeUrl%3futm_medium%3dabc%26utm_source%3dabc%26utm_campaign%3dabc

たとえば、asp.net コントロールの NavigateUrl プロパティをリダイレクトまたは詰め込み、asp.net にレンダリングさせて、ターゲット ページに到達する前に最初のデコードを実行するなど、事前に URL を使用して何かを行う必要があります。

于 2010-03-23T18:05:22.420 に答える
0

これはブラウザに関係していると思います。

Google の Browser Security Documentを見ると、MSIE7、MSIE8、FF3、Opera、Chrome のブラウザは、アドレス バーの予約されていない %nn シーケンスを変換します。

この結果をどのブラウザーでテストしましたか?

于 2010-03-23T18:07:08.010 に答える