web-dev-qa-db-fra.com

Validation d'adresse électronique pour ASP.NET

Qu'est-ce que vous utilisez pour valider une adresse de messagerie sur un formulaire ASP.NET. Je veux m'assurer qu'il ne contient aucun exploit XSS.

C'est ASP.NET 1.1

64
Brian G

Toutes les balises de script publiées sur un formulaire Web ASP.NET provoqueront une exception non gérée par votre site.

Vous pouvez utiliser un validateur asp regex pour confirmer la saisie. Veillez simplement à envelopper la méthode code behind avec une clause if (IsValid) au cas où votre javascript soit ignoré. Si le javascript de votre client est ignoré et que les balises de script sont publiées sur votre formulaire asp.net, asp.net lève une exception non gérée.

Vous pouvez utiliser quelque chose comme:

<asp:RegularExpressionValidator ID="regexEmailValid" runat="server" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ControlToValidate="tbEmail" ErrorMessage="Invalid Email Format"></asp:RegularExpressionValidator>
118
WebDude

Voici un validateur de courrier électronique de base que je viens de créer, basé sur l'idée de Simon Johnson. Il a simplement besoin de la fonctionnalité supplémentaire de recherche DNS ajoutée si nécessaire.

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

    }
}

Mise à jour: Veuillez ne pas utiliser le regex original. Cherchez un échantillon plus récent et plus complet.

19
John_

Vous pouvez utiliser un validateur RegularExpression. La propriété ValidationExpression comporte un bouton sur lequel vous pouvez appuyer dans le panneau de la propriété de Visual Studio, qui répertorie de nombreuses expressions utiles. Celui qu'ils utilisent pour les adresses e-mail est:

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

Il est beaucoup plus difficile de valider qu'il s'agisse d'une véritable adresse électronique.

La regex pour confirmer que la syntaxe est correcte peut être très longue (voir http://www.regular-expressions.info/email.html par exemple). Le meilleur moyen de confirmer une adresse électronique consiste à envoyer un courrier électronique à l'utilisateur et à lui demander de répondre en cliquant sur un lien pour confirmer qu'il a reçu le courrier électronique (comme la plupart des systèmes d'inscription fonctionnent).

5
RB.

Dans notre code, nous avons un validateur spécifique hérité de la classe BaseValidator.

Cette classe fait ce qui suit:

  1. Valide l'adresse de messagerie par rapport à une expression régulière.
  2. Effectue une recherche sur l'enregistrement MX pour le domaine afin de s'assurer qu'il existe au moins un serveur à livrer.

C’est ce qui se rapproche le plus de la validation sans envoyer à la personne un lien de confirmation par courrier électronique.

5
Simon Johnson

Empêcher XSS est un problème différent de la validation des entrées.

À propos de XSS: Vous ne devriez pas essayer de vérifier entrée pour XSS ou des exploits associés. Vous devez empêcher les exploits XSS, l'injection SQL, etc. en évitant de manière correcte d'insérer des chaînes dans une langue différente où certains caractères sont "magiques", par exemple lors de l'insertion de chaînes en HTML ou en SQL. Par exemple, un nom tel que O'Reilly est une entrée parfaitement valide, mais peut provoquer un blocage ou pire, s'il est inséré non échappé dans SQL. Vous ne pouvez pas empêcher ce genre de problèmes en validant l'entrée.

La validation de la saisie de l'utilisateur est judicieuse pour éviter les données manquantes ou mal formées, par exemple. un utilisateur écrivant "asdf" dans le champ Code postal, etc. Wrt. adresses de messagerie, la syntaxe est si complexe cependant, qu'il ne fournit pas beaucoup d'avantage de le valider en utilisant une regex. Il suffit de vérifier qu’il contient un "@".

4
JacquesB

Vous devez également toujours effectuer une validation côté serveur.

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

Code rapide et simple

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
Naveen Soni