2008-10-08 202 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; 
    } 
} 
相关问题