2008-10-08 5 views

Répondre

110

Toutes les balises de script affichées sur un formulaire Web ASP.NET causeront votre site pour lancer et exception non gérée.

Vous pouvez utiliser un validateur asp regex pour confirmer l'entrée, assurez-vous simplement de placer votre code derrière la méthode avec une clause if (IsValid) si votre javascript est ignoré. Si votre javascript client est ignoré et que les balises de script sont posté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> 
+0

Il a dit que c'est ASP.NET 1.1, les contrôles de validation sont-ils supportés dans cette version? – Shimmy

+0

RegularExpressionValidators sont disponibles dans ASP.NET 1.1 http://msdn.microsoft.com/en-us/library/eahwtc9e%28v=VS.71%29.aspx – Diskdrive

+1

J'utilise cette expression, mais étrangement, il semble autoriser les emails vides ......? Je devais également ajouter un validateur de champ obligatoire. – UmaN

4

La prévention XSS est un autre problème de validation d'entrée. En ce qui concerne XSS: Vous ne devriez pas essayer de vérifier l'entrée pour XSS ou exploits connexes. Vous devriez éviter les exploits XSS, l'injection SQL et ainsi de suite en échappant correctement lors de l'insertion de chaînes dans un langage différent où certains caractères sont "magiques", par exemple, lors de l'insertion de chaînes en HTML ou SQL. Par exemple, un nom comme O'Reilly est une entrée parfaitement valide, mais pourrait provoquer un crash ou pire s'il est inséré dans SQL. Vous ne pouvez pas empêcher ce genre de problèmes en validant les entrées.

La validation de l'entrée de l'utilisateur est logique pour éviter les données manquantes ou incorrectes, par ex. un utilisateur écrit "asdf" dans le champ code-zip et ainsi de suite. Wrt. adresses e-mail, la syntaxe est si complexe, qu'elle ne fournit pas beaucoup d'avantages pour la valider en utilisant une regex. Vérifiez simplement qu'il contient un "@".

7

Vous pouvez utiliser un validateur RegularExpression. La propriété ValidationExpression possède un bouton que vous pouvez appuyer dans le panneau de la propriété de Visual Studio qui obtient des listes d'expressions utiles. Celui qu'ils utilisent pour les adresses e-mail est:

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

Veuillez garder à l'esprit que cela exclut certaines adresses e-mail valides. – Sam

5

VALIDATION DE qu'il est une adresse e-mail réelle est beaucoup plus difficile.

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

5

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

Cette classe effectue les opérations suivantes:

  1. l'adresse e Valide-mail à une expression régulière.
  2. Effectue une recherche sur l'enregistrement MX du domaine pour s'assurer qu'il y a au moins un serveur à livrer.

Ceci est le plus proche de la validation sans envoyer à la personne un lien de confirmation par e-mail.

+4

Comment trouvez-vous cela fonctionne dans la pratique. Ne trouvez-vous pas faire une recherche DNS est une touche lente? –

18

Voici un validateur de base d'email que je viens de créer basé sur l'idée de Simon Johnson. Il a juste besoin des fonctionnalités supplémentaires de la recherche DNS ajouté 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]+)*)[email protected][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; 
     } 

    } 
} 
+4

Veuillez garder à l'esprit que cela exclut certaines adresses e-mail valides. – Sam

+2

Le '|' dans la classe de caractères '[a-z | 0-9 |]' semble incorrect. Savez-vous que cela va correspondre au caractère '|' et ne pas fonctionner comme une alternative? En outre, cela a échoué pour mon adresse e-mail (test avec [email protected] ou [email protected]), donc c'est évidemment faux. – ygoe

2

Vous devez toujours effectuer la validation côté serveur.

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