2010-03-24 6 views
5

Nous envoyons des urls d'inscription aux clients par e-mail. Certains des clients de messagerie se tournent l'URL dansComment intercepter et prétraiter QueryStrings dans Asp.Net

url <url> 

Je pense qu'il peut se produire lorsque les utilisateurs transmettent le courrier électronique sur eux-mêmes à quel point le client de messagerie reformate le message d'origine (peut-être)

Par ex

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

Devient

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

qui produit à juste titre System.Web.HttpRequestValidationException: Une valeur de Request.QueryString potentiellement dangereuse a été détectée

Où dans le code dois-je intercepter ces instances et santize l'URL de sorte que l'utilisateur est redirigé sur la forme originale de l'URL?

global.asax? Page_Init? HttpHandler? Pipeline?

Répondre

2

Vous pouvez l'attraper dans Global Application_BeginRequest ou dans le même événement dans un HttpModule.

mondial

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

Module

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

     } 
    } 
} 

Cela permettra à votre demande traitée avec la chaîne de requête correcte dans la demande, quel que soit ce que vous voyez dans l'adresse du navigateur. Vous pourriez être en mesure de prendre des mesures supplémentaires pour enlever les déchets de l'url signalée, mais ce n'est principalement que de l'esthétique.

+0

Merci, je vais essayer ... –

Questions connexes