5 Stimmen

Wie man QueryStrings in Asp.Net abfängt und vorverarbeitet

Wir versenden die Registrierungsurl an die Kunden per E-Mail. Einige der E-Mail-Clients verwandeln die URL in

url <url>

Ich denke, das Problem tritt auf, wenn der Benutzer die E-Mail an sich selbst weiterleitet, woraufhin der E-Mail-Client die ursprüngliche E-Mail (möglicherweise) neu formatiert.

z.B.

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

Wird zu

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

Was zu Recht System.Web.HttpRequestValidationException erzeugt: Ein potentiell gefährlicher Request.QueryString-Wert wurde entdeckt

Wo im Code sollte ich diese Instanzen abfangen und die Url santizen, so dass der Benutzer auf die ursprüngliche Form der Url umgeleitet wird?

global.asax? Page_Init? HttpHandler? Pipeline?

2voto

Sky Sanders Punkte 34472

Sie können es in Global Application_BeginRequest oder in demselben Ereignis in einem HttpModule abfangen.

Global

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);
            }
        }
    }
}

Modul

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);
            }

        }
    }
}

Dadurch wird Ihre Anfrage mit dem korrekten Query-String in der Anfrage verarbeitet, unabhängig davon, was Sie in der Browseradresse sehen. Möglicherweise können Sie zusätzliche Schritte unternehmen, um den Müll aus der gemeldeten URL zu entfernen, aber das ist hauptsächlich eine Frage der Ästhetik.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X