ASP.NET的电子邮件地址验证

时间:2008-10-08 12:46:21

标签: asp.net validation email

您使用什么来验证ASP.NET表单上的电子邮件地址。我想确保它不包含XSS漏洞。

这是ASP.NET 1.1

9 个答案:

答案 0 :(得分:115)

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

您可以使用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>

答案 1 :(得分: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;
        }

    }
}

更新:请不要使用原始的正则表达式。寻找更新更完整的样本。

答案 2 :(得分:7)

您可以使用RegularExpression验证器。 ValidationExpression属性有一个按钮,您可以在Visual Studio的属性面板中按下该按钮,列出许多有用的表达式。他们用于电子邮件地址的是:

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

答案 3 :(得分:5)

验证它是真实的电子邮件地址要困难得多。

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

答案 4 :(得分:5)

在我们的代码中,我们有一个从BaseValidator类继承的特定验证器。

本课程执行以下操作:

  1. 根据正则表达式验证电子邮件地址。
  2. 是否在域的MX记录上查找以确保至少有一台服务器要传递到该域。
  3. 这是您最接近验证而无需向该人发送电子邮件确认链接的最近内容。

答案 5 :(得分:4)

防止XSS与验证输入不同。

关于XSS:您不应该尝试检查输入以获取XSS或相关漏洞。您应该通过在将字符串插入到某些字符是“魔术”的不同语言时正确转义来阻止XSS漏洞利用,SQL注入等,例如,在HTML或SQL中插入字符串时。例如,像O'Reilly这样的名称是完全有效的输入,但如果插入到SQL中,可能会导致崩溃或更糟。您无法通过验证输入来阻止此类问题。

验证用户输入有助于防止数据丢失或格式错误,例如。用户在邮政编码字段中写“asdf”等等。 WRT。电子邮件地址,语法是如此复杂,但它并没有提供使用正则表达式验证它的好处。只需检查它是否包含“@”。

答案 6 :(得分:4)

您也应该始终进行服务器端验证。

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

答案 7 :(得分:0)

快速简单的代码

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);
}

答案 8 :(得分:0)

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;
                    }
                }