5

登録 URL をメールでクライアントに送信します。一部の電子メール クライアントは、URL を

url <url>

ユーザーがメールを自分自身に転送し、その時点でメールクライアントが元のメールを再フォーマットするときに発生する可能性があると思います(おそらく)

例えば

https://my.app.com/login.aspx?param=var

なる

https://my.app.com/login.aspx?param=var%20%3Chttps://my.app.com/login.aspx?param=var%3E

System.Web.HttpRequestValidationException: 潜在的に危険な Request.QueryString 値が検出されました

ユーザーが元の形式の URL にリダイレクトされるように、コードのどこでこれらのインスタンスをインターセプトし、URL をサニタイズする必要がありますか?

グローバル.asax? Page_Init? HttpHandler? パイプライン?

4

1 に答える 1

2

グローバル Application_BeginRequest または HttpModule の同じイベントでキャッチできます。

グローバル

using System;
using System.Web;

namespace MassageIncomingRequestUrl
{
    public class Global : HttpApplication
    {
        protected void Application_BeginRequest(object sender, EventArgs e)
        {
            var app = (HttpApplication) sender;
            string path = app.Context.Request.Url.PathAndQuery;
            int pos = path.IndexOf("%20%3C");
            if (pos > -1)
            {
                path = path.Substring(0, pos);
                app.Context.RewritePath(path);
            }
        }
    }
}

モジュール

using System;
using System.Web;

namespace MassageIncomingRequestUrl
{
    public class UrlMungeModule : IHttpModule
    {
        #region IHttpModule Members

        public void Init(HttpApplication context)
        {
            context.BeginRequest += BeginRequest;
        }

        public void Dispose()
        {
            //nop
        }

        #endregion

        private static void BeginRequest(object sender, EventArgs e)
        {
            var app = (HttpApplication)sender;
            string path = app.Context.Request.Url.PathAndQuery;
            int pos = path.IndexOf("%20%3C");
            if (pos>-1)
            {
                path = path.Substring(0,pos);
                app.Context.RewritePath(path);
            }

        }
    }
}

これにより、ブラウザーのアドレスに表示される内容に関係なく、リクエスト内の正しいクエリ文字列でリクエストが処理されます。報告された URL からゴミを取り除くために追加の手順を実行できる場合がありますが、それは主に美学にすぎません。

于 2010-03-24T12:17:40.110 に答える