2008-10-08 226 views

回答

110

發佈了ASP.NET Web窗體上的任何腳本標籤將導致您的網站並拋出未處理的異常。

你可以使用一個asp正則表達式驗證器來確認輸入,只要你的javascript被繞過,確保你用if(IsValid)子句包裝你的代碼。 如果您的客戶端javascript被繞過並且腳本標記被髮布到您的asp.net表單,則asp.net將拋出未處理的異常。

您可以使用類似:

<asp:RegularExpressionValidator ID="regexEmailValid" runat="server" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ControlToValidate="tbEmail" ErrorMessage="Invalid Email Format"></asp:RegularExpressionValidator> 
+0

他說,它的ASP.NET 1.1,支持在該版本驗證控件? – Shimmy 2009-07-13 08:31:31

+0

RegularExpressionValidators在ASP.NET 1.1提供http://msdn.microsoft.com/en-us/library/eahwtc9e%28v=VS.71%29.aspx – Diskdrive 2011-04-27 00:42:27

+1

我用這句話,但奇怪的是它似乎讓空電子郵件......?我還必須添加一個必需的字段驗證程序。 – UmaN 2012-05-14 07:38:04

4

防止XSS是驗證輸入一個不同的問題。

關於XSS:您不應該嘗試檢查對於XSS或相關漏洞的輸入。在將字符串插入到某些字符爲「魔術」的不同語言中時,例如在以HTML或SQL插入字符串時,應該通過正確轉義避免XSS漏洞利用,SQL注入等。例如像O'Reilly這樣的名字是完全有效的輸入,但如果插入到SQL中則可能導致崩潰或更糟。您無法通過驗證輸入來防止這類問題。

確認用戶輸入有意義,以防止丟失或格式錯誤的數據,例如。用戶在郵政編碼字段中寫「asdf」等等。 WRT。電子郵件地址,語法雖然非常複雜,但它並沒有提供多大的好處來驗證它使用正則表達式。只需檢查它是否包含「@」。

7

您可以使用RegularExpression驗證程序。 ValidationExpression屬性具有一個按鈕,您可以在Visual Studio的屬性面板中按下按鈕,以獲取列表中很多有用的表達式。他們使用的電子郵件地址的一個是:

\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 
+2

請注意,這不包括一些有效的電子郵件地址。 – Sam 2013-04-10 23:42:50

5

驗證,這是一個真實的電子郵件地址是更難。

確認語法正確的正則表達式可能很長(例如參見http://www.regular-expressions.info/email.html)。確認電子郵件地址的最佳方式是向用戶發送電子郵件,並通過單擊鏈接來驗證用戶是否收到了電子郵件(大多數註冊系統的工作方式),以便用戶回覆。

5

在我們的代碼中,我們有一個從BaseValidator類繼承的特定驗證器。

該類執行以下操作:

  1. 驗證對正則表達式的E-mail地址。
  2. 在域名的MX記錄上進行查找,以確保至少有一臺服務器要提供給該域。

這是最接近你可以得到驗證沒有實際發送人的電子郵件確認鏈接。

18

下面是我剛剛根據Simon Johnson的想法創建的基本電子郵件驗證程序。只需要添加DNS查找的額外功能即可。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Web.UI.WebControls; 
using System.Text.RegularExpressions; 
using System.Web.UI; 

namespace CompanyName.Library.Web.Controls 
{ 
    [ToolboxData("<{0}:EmailValidator runat=server></{0}:EmailValidator>")] 
    public class EmailValidator : BaseValidator 
    { 

     protected override bool EvaluateIsValid() 
     { 
      string val = this.GetControlValidationValue(this.ControlToValidate); 
      string pattern = @"^[a-z][a-z|0-9|]*([_][a-z|0-9]+)*([.][a-z|0-9]+([_][a-z|0-9]+)*)[email protected][a-z][a-z|0-9|]*\.([a-z][a-z|0-9]*(\.[a-z][a-z|0-9]*)?)$"; 
      Match match = Regex.Match(val.Trim(), pattern, RegexOptions.IgnoreCase); 

      if (match.Success) 
       return true; 
      else 
       return false; 
     } 

    } 
} 
2

你應該總是做服務器端validaton。

public bool IsValidEmailAddress(string email) 
{ 
    try 
    { 
     var emailChecked = new System.Net.Mail.MailAddress(email); 
     return true; 
    } 
    catch 
    { 
     return false; 
    } 
}