2010-03-24 17 views
5

Enviamos urls de registro a los clientes por correo electrónico. Algunos de los clientes de correo electrónico está girando el URL enCómo interceptar y preprocesar QueryStrings en Asp.Net

url <url> 

Creo que puede estar pasando cuando los usuarios reenviar el correo electrónico en sí mismos y en ese momento el correo electrónico original (tal vez)

por ejemplo, el cliente de correo electrónico Reformatea

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

Se convierte

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

Qué razón produce System.Web.HttpRequestValidationException: Un valor Request.QueryString potencialmente peligroso se detectó

Cuando en el código debería interceptar estos casos y santificar la url para que el usuario sea redirigido a la forma original de la url?

global.asax? Page_Init? HttpHandler? Pipeline?

Respuesta

2

Puede verlo en Global Application_BeginRequest o en el mismo evento en un HttpModule.

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

Módulo

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

     } 
    } 
} 

Esto hará que su solicitud procesada con la cadena de consulta correcta en la solicitud, independientemente de lo que se ve en la dirección del navegador. Es posible que pueda realizar pasos adicionales para eliminar la basura de la url informada, pero eso es principalmente estética.

+0

Gracias, intentaremos esto ... –

Cuestiones relacionadas