Bri*_*n G 65 asp.net email validation
您使用什么来验证ASP.NET表单上的电子邮件地址.我想确保它不包含XSS漏洞.
这是ASP.NET 1.1
Web*_*ude 119
在ASP.NET Web表单上发布的任何脚本标记都将导致您的站点抛出和未处理的异常.
您可以使用asp regex验证器来确认输入,只需确保使用if(IsValid)子句将代码包装在方法后面,以防绕过javascript.如果您的客户端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>
Run Code Online (Sandbox Code Playgroud)
Joh*_*hn_ 19
这是我刚刚根据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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
更新:请不要使用原始的正则表达式.寻找更新更完整的样本.
您可以使用RegularExpression验证器.ValidationExpression属性有一个按钮,您可以在Visual Studio的属性面板中按下该按钮,列出许多有用的表达式.他们用于电子邮件地址的是:
\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
Run Code Online (Sandbox Code Playgroud)
您也应该始终进行服务器端验证。
public bool IsValidEmailAddress(string email)
{
try
{
var emailChecked = new System.Net.Mail.MailAddress(email);
return true;
}
catch
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
更新
您还可以使用EmailAddressAttribute
in System.ComponentModel.DataAnnotations
. 那么就不需要 try-catch 了,这是一个更干净的解决方案。
public bool IsValidEmailAddress(string email)
{
if (!string.IsNullOrEmpty(email) && new EmailAddressAttribute().IsValid(email))
return true;
else
return false;
}
Run Code Online (Sandbox Code Playgroud)
请注意,IsNullOrEmpty
还需要进行检查,否则null
值将返回 true。
验证它是一个真实的电子邮件地址要困难得多.
确认语法正确的正则表达式可能很长(例如,参见http://www.regular-expressions.info/email.html).确认电子邮件地址的最佳方式是通过电子邮件发送给用户,并通过单击链接来让用户回复以验证他们已收到电子邮件(大多数注册系统的工作方式).
在我们的代码中,我们有一个从BaseValidator类继承的特定验证器.
该类执行以下操作:
这是您最接近验证而不实际向该人发送电子邮件确认链接.
归档时间: |
|
查看次数: |
223823 次 |
最近记录: |