您使用什么来验证ASP.NET表单上的电子邮件地址。我想确保它不包含XSS漏洞。
这是ASP.NET 1.1
Answers:
在ASP.NET Web窗体上发布的任何脚本标签都将导致您的网站引发未处理的异常。
您可以使用asp regex验证程序来确认输入,只要确保在绕过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>
这是我刚根据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]+)*)?@[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;
}
}
}
更新:请不要使用原始正则表达式。寻找更新的更完整的样本。
|
在字符类[a-z|0-9|]
似乎是错误的。您是否知道这将与|
角色匹配并且无法替代?除此之外,我的电子邮件地址(使用1a@a.com或a@1.com进行测试)失败了,所以显然是错误的。
您还应该始终执行服务器端验证。
public bool IsValidEmailAddress(string email)
{
try
{
var emailChecked = new System.Net.Mail.MailAddress(email);
return true;
}
catch
{
return false;
}
}
更新
您也可以使用EmailAddressAttribute
in System.ComponentModel.DataAnnotations
。然后,无需尝试即可获得更干净的解决方案。
public bool IsValidEmailAddress(string email)
{
if (!string.IsNullOrEmpty(email) && new EmailAddressAttribute().IsValid(email))
return true;
else
return false;
}
请注意,IsNullOrEmpty
还需要进行检查,否则null
值将返回true。
验证它是否是真实的电子邮件地址要困难得多。
用于确认语法正确的正则表达式可能会很长(例如,请参见http://www.regular-expressions.info/email.html)。确认电子邮件地址的最佳方法是给用户发送电子邮件,然后通过单击链接以确认用户已收到电子邮件来使用户回复(大多数注册系统的工作方式)。
快速简单的代码
public static bool IsValidEmail(this string email)
{
const string pattern = @"^(?!\.)(""([^""\r\\]|\\[""\r\\])*""|" + @"([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?<!\.)\.)*)(?<!\.)" + @"@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]$";
var regex = new Regex(pattern, RegexOptions.IgnoreCase);
return regex.IsMatch(email);
}