Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + automatización eficaz

Validar Correo Electrónico

Nuestros ethical hackers explican la importancia de validar los campos de entrada de datos en los formularios de aplicaciones web. Además, enseñan la manera de validar los correos electrónicos usando expresiones regulares mediante un ejemplo realizado en Java.

Necesidad

Validar correo electrónico en Java.

Contexto

A continuación se describen las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. Se está desarrollando una aplicación en Java.

  2. Se requiere evitar el subdireccionamiento usando el carácter \+

  3. Se conoce como utilizar expresiones regulares en Java [1].

Solución

Al crear un formulario en HTML, hay que ser consciente de un detalle ineludible: los usuarios se equivocan al rellenar un formulario. Ya sea que dicha equivocación se de por ambigüedad del formulario, o tal vez algún error del creador del mismo, o incluso, que el usuario se equivoque deliberadamente. El caso es que hay que estar preparado y por consiguiente anticiparse a dichos errores, para intentar que los datos lleguen correctamente a su destino y evitar cualquier tipo de moderación, revisión posterior o, peor aun, algún ataque que ponga en peligro la confidencialidad e integridad de la información.

Para evitar estos casos, se suele recurrir a un tipo de proceso automático llamado validación. En este, se establecen algunas pautas para que, si el usuario introduce alguna información incorrecta o invalida, deba modificarla o, en caso contrario, no podrá continuar ni enviar el formulario correctamente.

Por lo general, muchos de los formularios HTML usan los correos electrónicos con el fin de permitir a los usuarios registrarse en las aplicaciones web y, adicionalmente, tener la posibilidad de mantener contacto directo con el usuario. No obstante, la especificación de correos electrónicos, tal como lo define el estándar internacional de direcciones en Internet RFC 5322 y predecesores [2], es demasiado permisiva.

La presente solución provee una validación bastante más restrictiva en cuanto al uso de correos electrónicos en formularios web.

  1. Para verificar la estructura de un correo, sólo con caracteres válidos, excluyendo el signo +, se empieza por importar las clases de Java habituales para manejo de expresiones regulares.

    Main.java
    1
    2
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
  2. Posteriormente, se define el patrón que especifica una dirección de email válida.

    1
    2
    3
    4
    public class Main {
      public static void main(String[] args) {
        String emailPattern = "^[_a-z0-9-]+(\\.[_a-z0-9-]+)*@" +
          "[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,4})$";
    
  3. La explicación de la expresión regular utilizada es:

    • ^ especifica el inicio de la entrada.

    • ([_a-z0-9-]) primer grupo. Se refiere a la aparición de uno o más caracteres compuestos por guión bajo, letras, números y guiones.

    • (\\.[_a-z0-9-]) segundo grupo. Puede ser opcional y repetible, se refiere a la aparición de un punto seguido de uno o más caracteres compuestos por guión bajo, letras, números y guiones.

    • *@ carácter arroba.

    • ([a-z0-9-]) tercer grupo. Especifica la aparición de uno o más caracteres compuestos por letras, números y guiones.

    • (\\.[a-z0-9-]) cuarto grupo. Especifica un punto seguido de uno o más caracteres compuestos por letras, números y guiones.

    • (\\.[a-z]{2,4}) quinto grupo. Especifica un punto seguido de entre 2 y 4 letras, con el fin de considerar dominios terminados, por ejemplo, en .co y .info.

    • $ especifica el fin de la entrada.

  4. Compilamos la expresión regular y asignamos a la variable email el argumento con el que se haya llamado a la aplicación.

    1
    2
    Pattern pattern = Pattern.compile(emailPattern);
    String email = args[0];
    
  5. En caso de que el email no sea nulo, se le aplica el patrón y se comprueba si cumple con este o no para mostrar por la salida estándar el mensaje Valido.

    1
    2
    3
    4
    if (email != null) {
       Matcher matcher = pattern.matcher(email);
       if (matcher.matches()) {
         System.out.println("Válido");
    
  6. De no haber sido válido el email, simplemente se muestra el mensaje NO Válido.

    1
    2
    3
    4
    5
    6
    7
       }
       else {
         System.out.println("NO Válido");
       }
      }
     }
    }
    
  7. Se compila y ejecuta la aplicación con algunos casos de prueba.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    % javac Main.java
    % java Main Fluid-Attacks@gmail.com.co
    Válido
    
    % java Main Fluid-Attacks+prueba@gmail.com.co
    NO Válido
    
    % java Main Fluid-Attacks+prueba@gmail.com.co
    NO Válido
    
    % java Main Fluid-Attacks@gmail.com.co
    Válido
    
    % java Main Fluid-Attacks@gmail.com
    Válido
    

Descargas

Puedes descargar el código fuente pulsando en el siguiente enlace:

Main.java Clase Main muestra la validación de email usando expresiones regulares.




Haz un comentario

Estado de los servicios - Términos de Uso