2013-10-28 91 views
0

我有一個傳統的ASP.NET應用程序(VS2005),大約有62頁和84個文本框控件分佈在它們之間(每頁2到6個文本框不等)。我想實施驗證以防止提交可能導致XSS漏洞的特殊字符。有沒有一種方法可以實現全局驗證功能,該功能一次適用於整個應用程序中的所有文本框控件?(儘量避免每個文本框使用一個驗證器,最小化對現有代碼的更改)。ASP.NET Web窗體應用程序中的文本控件的全局驗證

在此先感謝

+0

嗯,我不認爲你能夠發佈一些東西在webforms到以'<'開頭的服務器。問題解決了;) – Johan

+0

@Johan,提示:禁用事件驗證? – naveen

+0

@Johan它不僅僅是 Dev

回答

0

您可以使用繼承來解決這個問題:

第1步:創建基類的靜態方法

// Return true if is in valid e-mail format. 
public static bool IsValidEmail(string sEmail) 
{  
    return Regex.IsMatch(sEmail, @"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*"+ "@"+ @"((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$"); 
} 

第2步:指定此方法對所有的在子類中驗證所需的文本框

示例:

if (this.TextboxEmail.Text.Length > 0 && 
    IsValidEmail(this.TextboxEmail.Text) == false) 
{ 
    ErrMssg("Invalid Email"); 
} 
+0

請再次閱讀該問題。這不是關於所有頁面中的電子郵件驗證。 – Dev

0

你可以監聽提交事件,並防止它在情況下,一個或多個文本框中含有一定的模式:

$(function(){ 

    $('form').on('submit', function(e){ 

     var $invalidTextboxes = $('input[type="text"]').filter(function(){ 
      return this.value.match(/abc+d/); //your pattern here 
     }); 

     if($invalidTextboxes.length){ 
      alert('invalid textbox value'); 
      e.preventDefault(); 
     } 

    }); 

}); 

如果你有在頁面上更多的形式,並希望找出由web表單生成的一個:

How to capture submit event using jQuery in an ASP.NET application?

0

更好的和通用的方式在全球範圍內進行驗證。將採取HTTP模塊的幫助。

您可以添加一個新的從模塊類繼承的c#類。在類內部,您可以在表單元素上添加迭代並執行所需的驗證。這將幫助您在全局級別構建文本框驗證的通用實現。

class XssModule : IHttpModule 
    { 

     #region IHttpModule Members 
     public void Init(HttpApplication application) 
     { 
      application.PostAcquireRequestState += new EventHandler(Application_PostAcquireRequestState); 
     } 

     public void Dispose() 
     { 
     } 

     #endregion 

     private void Application_PostAcquireRequestState(object sender, EventArgs e) 
     { 

      if (HttpContext.Current.Session != null) 
      { 
      //Perform the iteration on the form elements here.     
      } 
     } 
    } 
相關問題