ASP.NET的电子邮件地址validation

你用什么来validationASP.NET表单上的电子邮件地址? 我想确保它不包含XSS漏洞。

这是ASP.NET 1.1

发布在ASP.NET Web表单上的任何脚本标记都会导致您的站点抛出和未处理的exception。

你可以使用一个asp正则expression式validation器来确认input,只要确保你的代码隐藏在带有if(IsValid)子句的方法后面,以防你的javascript被绕过。 如果您的客户端JavaScript被绕过,脚本标签发布到您的asp.net表单,asp.net将抛出一个未处理的exception。

你可以使用像这样的东西:

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

这里是我刚刚根据Simon Johnson的想法创build的基本电子邮件validation器。 只需要添加DNS查询的额外function即可。

 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 = @"^[az][az|0-9|]*([_][az|0-9]+)*([.][az|0-9]+([_][az|0-9]+)*)?@[az][az|0-9|]*\.([az][az|0-9]*(\.[az][az|0-9]*)?)$"; Match match = Regex.Match(val.Trim(), pattern, RegexOptions.IgnoreCase); if (match.Success) return true; else return false; } } } 

你可以使用RegularExpressionvalidation器。 ValidationExpression属性有一个button,您可以在Visual Studio的属性面板中获取列表中的很多有用的expression式。 他们用于电子邮件地址的是:

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

在我们的代码中,我们有一个从BaseValidator类inheritance的特定validation器。

这个类做了以下工作:

  1. 根据正则expression式validation电子邮件地址。
  2. 在域名的MXlogging上进行查找,以确保至less有一台服务器要发送到。

这是最接近你可以得到validation,而不实际发送人的电子邮件确认链接。

validation它是一个真正的电子邮件地址是非常困难的。

确认语法正确的正则expression式可能很长(例如,请参见http://www.regular-expressions.info/email.html )。 确认电子邮件地址的最佳方法是通过电子邮件发送给用户,并通过点击链接来validation用户是否收到了电子邮件(大多数注册系统工作的方式)。

防止XSS与validationinput不同。

关于XSS:您不应该尝试检查XSS或相关漏洞的input 。 在将string插入不同的语言(例如,在HTML或SQL中插入string)时,应该通过正确转义避免XSS漏洞利用,SQL注入等。 例如像O'Reilly这样的名字是完全有效的input,但是如果插入到SQL中则可能导致崩溃或者更糟。 你不能通过validationinput来防止这种问题。

validation用户input是有意义的,以防止丢失或格式错误的数据,例如。 用户在邮编区域写“asdf”等等。 WRT。 电子邮件地址,语法是如此复杂,但它没有提供很多好处,使用正则expression式进行validation。 只要检查它是否包含“@”。

你应该总是做服务器端validaton。

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