2008-10-08 60 views

Respuesta

110

Cualquier etiqueta de secuencia de comandos enviados en un formulario Web ASP.NET hará que su sitio para lanzar y excepción no controlada.

Puede usar un validador de asp regex para confirmar la entrada, solo asegúrese de ajustar el código detrás del método con una cláusula if (IsValid) en caso de que su javascript esté anulado. Si se omite su javascript de cliente y las etiquetas de script se publican en su formulario asp.net, asp.net lanzará una excepción no controlada.

Usted puede usar algo como:

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

Dijo que es ASP.NET 1.1, ¿los controles de validación son compatibles con esa versión? – Shimmy

+0

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

+1

Uso esta expresión, pero extrañamente parece permitir correos electrónicos vacíos ......? Tuve que agregar un validador de campo requerido también. – UmaN

4

Prevenir XSS es un tema diferente de la validación de entrada.

En cuanto a XSS: No intente comprobar la entrada para XSS o exploits relacionados. Debería evitar exploits XSS, inyección de SQL, etc. escapando correctamente al insertar cadenas en un idioma diferente donde algunos caracteres son "mágicos", por ejemplo, al insertar cadenas en HTML o SQL. Por ejemplo, un nombre como O'Reilly es una entrada perfectamente válida, pero podría causar un bloqueo o algo peor si se inserta sin guardar en SQL. No puede evitar ese tipo de problemas validando la entrada.

La validación de la entrada del usuario tiene sentido para evitar datos faltantes o mal formados, por ej. un usuario que escribe "asdf" en el campo de código postal y así sucesivamente. Wrt. direcciones de correo electrónico, la sintaxis es tan compleja, que no proporciona muchos beneficios para validarlo usando una expresión regular. Simplemente verifique que contenga una "@".

7

Puede usar un validador de Expresiones regulares. La propiedad ValidationExpression tiene un botón que puede presionar en el panel de propiedades de Visual Studio que obtiene una lista de muchas expresiones útiles. La que utilizan direcciones de correo electrónico es:

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

Tenga en cuenta que esto excluye algunas direcciones de correo electrónico válidas. – Sam

5

validar que se trata de una dirección de correo electrónico real es mucho más difícil.

La expresión regular para confirmar que la sintaxis es correcta puede ser muy larga (consulte http://www.regular-expressions.info/email.html por ejemplo). La mejor manera de confirmar una dirección de correo electrónico es enviar un correo electrónico al usuario y hacer que el usuario responda haciendo clic en un enlace para validar que recibió el correo electrónico (la forma en que funcionan la mayoría de los sistemas de registro).

5

En nuestro código tenemos un validador específico heredado de la clase BaseValidator.

Esta clase hace lo siguiente:

  1. valida la dirección de correo electrónico con una expresión regular.
  2. Hace una búsqueda en el registro MX del dominio para asegurarse de que hay al menos un servidor para entregar.

Esto es lo más cerca que puede llegar a la validación sin enviar realmente a la persona un enlace de confirmación por correo electrónico.

+4

¿Cómo crees que esto funciona en la práctica? ¿No te parece que hacer una búsqueda de DNS es un toque lento? –

18

Aquí hay un validador de correo electrónico básico que acabo de crear basado en la idea de Simon Johnson. Simplemente necesita la funcionalidad adicional de la búsqueda de DNS que se agrega si es necesario.

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

Tenga en cuenta que esto excluye algunas direcciones de correo electrónico válidas. – Sam

+2

El '|' en la clase de caracteres '[a-z | 0-9 |]' parece incorrecto. ¿Sabía que esto coincidirá con el carácter '|' y no funcionará como alternativa? Además, esto ha fallado en mi dirección de correo electrónico (prueba con [email protected] o [email protected]), por lo que obviamente está mal. – ygoe

2

Siempre debe hacer la validación del lado del servidor también.

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