ASP.NET的电子邮件地址验证
您使用什么来验证ASP.NET表单上的电子邮件地址。我想确保它不包含XSS漏洞ASP.NET的电子邮件地址验证,asp.net,validation,email,Asp.net,Validation,Email,您使用什么来验证ASP.NET表单上的电子邮件地址。我想确保它不包含XSS漏洞 这是ASP.NET 1.1防止XSS与验证输入是不同的问题 关于XSS:您不应该尝试检查XSS或相关漏洞的输入。在将字符串插入到另一种语言(某些字符是“魔法”的)时,例如在HTML或SQL中插入字符串时,应正确转义,以防止XSS攻击、SQL注入等。例如,像O'Reilly这样的名称是完全有效的输入,但如果将其插入SQL,则可能会导致崩溃或更糟的情况。您无法通过验证输入来防止此类问题 验证用户输入有助于防止数据丢失或格
这是ASP.NET 1.1防止XSS与验证输入是不同的问题 关于XSS:您不应该尝试检查XSS或相关漏洞的输入。在将字符串插入到另一种语言(某些字符是“魔法”的)时,例如在HTML或SQL中插入字符串时,应正确转义,以防止XSS攻击、SQL注入等。例如,像O'Reilly这样的名称是完全有效的输入,但如果将其插入SQL,则可能会导致崩溃或更糟的情况。您无法通过验证输入来防止此类问题
验证用户输入有助于防止数据丢失或格式错误,例如用户在邮政编码字段中写入“asdf”等。Wrt。电子邮件地址,语法非常复杂,使用正则表达式验证它没有多大好处。只需检查它是否包含“@”。您可以使用RegularExpression验证器。ValidationExpression属性有一个按钮,您可以在VisualStudio属性的面板中按下该按钮,该按钮将列出许多有用的表达式。他们使用的电子邮件地址是:
\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
ASP.NET web表单上发布的任何脚本标记都将导致您的网站引发未经处理的异常 您可以使用asp正则表达式验证器来确认输入,只要确保使用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>
验证它是否是真实的电子邮件地址要困难得多
确认语法正确的正则表达式可能很长(参见示例)。确认电子邮件地址的最佳方法是向用户发送电子邮件,并通过单击链接验证用户是否收到电子邮件(大多数注册系统的工作方式)。在我们的代码中,我们从BaseValidator类继承了一个特定的验证器 该类执行以下操作:
这是最接近验证的方法,无需向此人发送电子邮件确认链接。这是我根据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;
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Web.UI.WebControl;
使用System.Text.RegularExpressions;
使用System.Web.UI;
命名空间CompanyName.Library.Web.Controls
{
[ToolboxData(“”)
公共类EmailValidator:BaseValidator
{
受保护的重写bool EvaluateIsValid()
{
字符串val=this.GetControlValidationValue(this.ControlToValidate);
字符串模式=“^[a-z][a-z|0-9|]*([a-z][a-z|0-9]+)*([.][a-z|0-9]+([a-z][a-z|0-9]*)?[a-z][a-z|0-9]*。([a-z][a-z|a-0-9]*(\.[a-z][a-z][a-z]0-9]*)”;
Match Match=Regex.Match(val.Trim(),pattern,RegexOptions.IgnoreCase);
如果(匹配成功)
返回true;
其他的
返回false;
}
}
}
更新:请不要使用原始正则表达式。寻找一个更新的更完整的示例。您也应该始终进行服务器端验证
public bool IsValidEmailAddress(string email)
{
try
{
var emailChecked = new System.Net.Mail.MailAddress(email);
return true;
}
catch
{
return false;
}
}
更新
您还可以在System.ComponentModel.DataAnnotations
中使用EmailAddressAttribute
。那么就不需要尝试捕捉,因为它是一种更清洁的解决方案
public bool IsValidEmailAddress(string email)
{
if (!string.IsNullOrEmpty(email) && new EmailAddressAttribute().IsValid(email))
return true;
else
return false;
}
请注意,还需要检查IsNullOrEmpty
复选框,否则null
值将返回true。快速简单的代码
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);
}
public static bool IsValidEmail(此字符串电子邮件)
{
常量字符串模式=@“^(?!\)(([^”“\r\\]\\\\\\[”“\r\\])*“\\”+@”([-a-z0-9!$%&'*+/=?^ `{124;}~)(?使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
利用制度全球化;
使用System.Text.RegularExpressions;
///
///RegexUtilities的摘要说明
///
公营部门
{
bool无效=错误;
公共bool IsValidEmail(string strIn)
{
无效=错误;
if(String.IsNullOrEmpty(strIn))
返回false;
//使用IdnMapping类转换Unicode域名。
strIn=Regex.Replace(strIn,@“(@)(.+)$”,this.DomainMapper);
如果(无效)
返回false;
//如果strIn为有效的电子邮件格式,则返回true。
返回Regex.IsMatch(strIn,“^(?”(“[^”]+?”@)([0-9a-z]((\.(?!\))[124;[-!\$%和“\*\+/=\?\^\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\(?你觉得这在实践中是如何工作的。你不觉得DNS查找有点慢吗?他说是ASP.NET 1.1,该版本支持验证控件吗?ASP.NET 1.1中提供RegularExpressionValidator。我使用这个表达式,但奇怪的是它似乎允许空电子邮件……?我还必须添加一个必需的字段验证程序。P请记住,这会排除一些有效的电子邮件地址。请记住,这会排除一些有效的电子邮件地址。字符类[a-z | 0-9 |]中的
似乎是错误的。您是否知道这将与|
字符匹配,并且不能作为替代字符使用?此外,我的电子邮件地址已失败(使用测试)1a@a.com或a@1.com),所以这显然是错误的。请记住,这排除了一些有效的电子邮件地址。此按钮在哪里?至少在Visual Studio 2017中找不到它。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Globalization;
using System.Text.RegularExpressions;
/// <summary>
/// Summary description for RegexUtilities
/// </summary>
public class RegexUtilities
{
bool InValid = false;
public bool IsValidEmail(string strIn)
{
InValid = false;
if (String.IsNullOrEmpty(strIn))
return false;
// Use IdnMapping class to convert Unicode domain names.
strIn = Regex.Replace(strIn, @"(@)(.+)$", this.DomainMapper);
if (InValid)
return false;
// Return true if strIn is in valid e-mail format.
return Regex.IsMatch(strIn, @"^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" + @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$",
RegexOptions.IgnoreCase);
}
private string DomainMapper(Match match)
{
// IdnMapping class with default property values.
IdnMapping idn = new IdnMapping();
string domainName = match.Groups[2].Value;
try
{
domainName = idn.GetAscii(domainName);
}
catch (ArgumentException)
{
InValid = true;
}
return match.Groups[1].Value + domainName;
}
}
RegexUtilities EmailRegex = new RegexUtilities();
if (txtEmail.Value != "")
{
string[] SplitClients_Email = txtEmail.Value.Split(',');
string Send_Email, Hold_Email;
Send_Email = Hold_Email = "";
int CountEmail;/**Region For Count Total Email**/
CountEmail = 0;/**First Time Email Counts Zero**/
bool EmaiValid = false;
Hold_Email = SplitClients_Email[0].ToString().Trim().TrimEnd().TrimStart().ToString();
if (SplitClients_Email[0].ToString() != "")
{
if (EmailRegex.IsValidEmail(Hold_Email))
{
Send_Email = Hold_Email;
CountEmail = 1;
EmaiValid = true;
}
else
{
EmaiValid = false;
}
}
if (EmaiValid == false)
{
divStatusMsg.Style.Add("display", "");
divStatusMsg.Attributes.Add("class", "alert alert-danger alert-dismissable");
divStatusMsg.InnerText = "ERROR !!...Please Enter A Valid Email ID.";
txtEmail.Focus();
txtEmail.Value = null;
ScriptManager.RegisterStartupScript(Page, this.GetType(), "SmoothScroll", "SmoothScroll();", true);
divStatusMsg.Visible = true;
ClientScript.RegisterStartupScript(this.GetType(), "alert", "HideLabel();", true);
return false;
}
}