2010-03-24 46 views
5

我們通過電子郵件向客戶發送註冊URL。一些電子郵件客戶端被打開網址爲如何攔截並預處理Asp.Net中的QueryStrings

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值凡在代碼我應該攔截這些實例並對網址進行santize,以便用戶重定向到url的原始形式?

global.asax? Page_Init? HttpHandler? 管道?

回答

2

您可以在Global 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); 
      } 

     } 
    } 
} 

這將讓你的要求處理與請求正確的查詢字符串,無論你在瀏覽器地址看看。您可以採取額外措施從報告的網址中移除垃圾,但這主要只是美學。

+0

謝謝,會試試這個... –

相關問題