Validação do endereço de E-mail para ASP.NET

o que é que usa para validar um endereço de E-mail num ASP.NET forma. Quero ter a certeza que não contém nenhuma exploração XSS.

Isto é ... ASP.NET 1, 1

Author: Shimmy, 2008-10-08

8 answers

Quaisquer marcas de script publicadas num ASP.NET o formulário web fará com que o seu site lance uma exceção livre.

Você pode usar um validador asp regex para confirmar a entrada, basta garantir que você embrulha o seu código por trás do método com uma cláusula if(IsValid) no caso do seu javascript ser contornado. Se o seu cliente javascript for contornado e as marcas de script forem postadas no seu asp.net forma, asp.net abrirá uma excepção.

Podes usar algo como:

<asp:RegularExpressionValidator ID="regexEmailValid" runat="server" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ControlToValidate="tbEmail" ErrorMessage="Invalid Email Format"></asp:RegularExpressionValidator>
 113
Author: WebDude, 2008-10-08 12:55:47
Aqui está um validador básico de E-mail que acabei de criar baseado na ideia de Simon Johnson. Ele só precisa da funcionalidade extra de pesquisa DNS sendo adicionado se for necessário.
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;
        }

    }
}

Actualização: por favor, não use a expressão regular original. Procure uma amostra mais recente e completa.

 19
Author: John_, 2018-08-22 13:04:17

Pode usar um agente de validação RegularExpression. A propriedade ValidationExpression tem um botão que você pode pressionar no painel da propriedade do Visual Studio que recebe listas de muitas expressões úteis. O que eles usam para endereços de E-mail é:

\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
 7
Author: Martin Brown, 2008-10-08 12:55:12
Validar que é um verdadeiro endereço de E-mail é muito mais difícil.

O regex para confirmar que a sintaxe está correcta pode ser muito longo (ver http://www.regular-expressions.info/email.html por exemplo). A melhor maneira de confirmar um endereço de E-mail é Enviar E-mail ao usuário, e fazer com que o usuário responda clicando em um link para validar que eles receberam o e-mail (a forma como a maioria dos sistemas de inscrição funciona).

 5
Author: RB., 2008-10-08 12:56:21
No nosso Código temos um validador específico herdado da classe BaseValidator.

Esta classe faz o seguinte:

  1. valida o endereço de E-mail contra uma expressão regular.
  2. faz uma pesquisa no registro MX para o domínio para se certificar de que há pelo menos um servidor para entregar.

Este é o mais próximo que você pode chegar à validação sem realmente enviar à pessoa um link de confirmação de E-mail.

 5
Author: Simon Johnson, 2008-10-08 12:59:44

Impedir o XSS é uma questão diferente de validar a entrada.

Em relação ao XSS: não deve tentar verificar a entrada para o XSS ou façanhas relacionadas. Você deve evitar que XSS exploits, injeção de SQL e assim por diante, escapando corretamente ao inserir strings em uma língua diferente onde alguns caracteres são "magic", por exemplo, ao inserir strings em HTML ou SQL. Por exemplo, um nome como O'Reilly é uma entrada perfeitamente válida, mas pode causar um estoiro ou pior se inserido sem ser gravado em BANCO. Você não pode evitar esse tipo de problemas validando a entrada.

A validação da entrada do utilizador faz sentido para evitar dados em falta ou malformados, por exemplo. um usuário escrevendo "asdf" no campo de código zip e assim por diante. Wrt. e-mail adresses, a sintaxe é tão complexa, porém, que não fornece muito benefício para validá-lo usando um regex. Basta verificar que ele contém um"@".

 4
Author: JacquesB, 2008-10-08 13:03:22

Você deve sempre fazer validaton lado servidor também.

public bool IsValidEmailAddress(string email)
{
    try
    {
        var emailChecked = new System.Net.Mail.MailAddress(email);
        return true;
    }
    catch
    {
        return false;
    }
}
 3
Author: VDWWD, 2017-03-31 13:02:27

Código simples e rápido

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);
}
 0
Author: Naveen Soni, 2018-08-09 10:22:36