Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + Tecnología especializada
DXST - SAST - IAST - SCA - DevSecOps
Caja blanca - Caja gris - Caja negra
Atacando Aplicaciones Web, APIs, Apps Móviles,
Cliente Servidor, Servidores, Redes, Dispositivos IoT
IoT SCI: Sistemas de Control Industrial

Validar Correo Electrónico

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en COBOL al explicar cómo se debe validar una cuenta de correo electrónico. La validación de información es una tarea clave en cualquier aplicación, para evitar problemas de seguridad.

Necesidad

Validar correo electrónico en COBOL.

Contexto

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

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

  2. Debe validarse que el correo electrónico se encuentra asociado a un solo usuario a pesar del componente entre el + y la @[1].

Solución

  1. Se define la división IDENTIFICATION DIVISION[2] para la solución:

    cobolemail.cbl
    1
    2
    3
    4
    5
           IDENTIFICATION DIVISION.
          ******************
          * Identification *
          ******************
           PROGRAM-ID. COBOLEMAIL.
    
  2. En la división DATA DIVISION[3] se definen las variables que serán usadas por el programa:

    • W01-EMAIL: contiene el email ingresado por entrada estándar.

    • W02-VALIDEMAIL: al final del proceso contendrá el correo electrónico final que se debe usar en producción (Correo sin el componente entre + y @).

    • W03-COUNT: variable temporal usada para contar diferentes caracteres.

    • W04-EMAIL: variable temporal para almacenar el nombre de usuario y el dominio del correo electrónico proporcionado.

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
            ********
            * Data *
            ********
             DATA DIVISION.
      
             WORKING-STORAGE SECTION.
             01 W01-EMAIL      PIC X(256) VALUE "".
             01 W02-VALIDEMAIL PIC X(256) VALUE "".
             01 W03-COUNT      PIC 9(002) VALUE 0.
             01 W04-EMAIL
                 02 W04-USERNAME PIC X(64).
                 02 W04-DOMAIN   PIC X(255).
      
  3. Iniciamos nuestro programa dentro de la división PROCEDURE DIVISION[4] aceptando por entrada estándar un correo electrónico:

    1
    2
    3
    4
    5
    6
          ********
          * Main *
          ********
           PROCEDURE DIVISION.
           MAIN.
               ACCEPT W01-EMAIL.
    
  4. Contamos todos los arrobas que se encuentran en el correo proporcionado:

    1
    2
    3
           INSPECT W01-EMAIL
           TALLYING W03-COUNT
           FOR ALL "@".
    
  5. El número de arrobas debe ser mayor a cero:

    1
           IF W03-COUNT > 0 THEN
    
  6. Reinicializamos la variable de contador:

    1
           MOVE 0 TO W03-COUNT
    
  7. Separamos el correo electrónico a través del arroba, en la primera parte debe quedar el nombre de usuario y en la segunda parte el dominio:

    1
    2
    3
           UNSTRING W01-EMAIL
           DELIMITED BY "@"
           INTO W04-USERNAME W04-DOMAIN
    
  8. Contamos todos los caracteres en el nombre del usuario:

    1
    2
    3
    4
           INSPECT W04-USERNAME
           TALLYING W03-COUNT
           FOR CHARACTERS
           BEFORE INITIAL SPACE
    
  9. Si es mayor a cero, reinicializamos el contador y continuamos con el proceso:

    1
    2
           IF W03-COUNT > 0 THEN
               MOVE 0 TO W03-COUNT
    
  10. Se cuenta todos los caracteres en la parte del dominio (sin incluir espacios):

    1
    2
    3
    4
           INSPECT W04-DOMAIN
           TALLYING W03-COUNT
           FOR CHARACTERS
           BEFORE INITIAL SPACE
    
  11. Si contiene un nombre de dominio, procedemos a realizar la última parte del proceso:

    1
           IF W03-COUNT > 0 THEN
    
  12. Enviamos el componente antes del carácter + a la variable W02-VALIDEMAIL:

    1
    2
    3
           UNSTRING W04-USERNAME
           DELIMITED BY "+"
           INTO W02-VALIDEMAIL
    
  13. Por último unimos el usuario con el nombre del dominio, de esta forma separamos el componente entre el + y el @, evitando que un usuario pueda registrar múltiples cuentas con un único correo válido:

    1
    2
    3
           STRING W02-VALIDEMAIL "@" W04-DOMAIN
           DELIMITED BY SPACE
           INTO W02-VALIDEMAIL
    
  14. Mostramos el correo electrónico válido:

    1
           DISPLAY W02-VALIDEMAIL
    
  15. Cualquier otra situación puede ser considerada como un error de correo electrónico:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
                   ELSE
                       PERFORM EMAIL-ERROR
                   END-IF
               ELSE
                   PERFORM EMAIL-ERROR
               END-IF
           ELSE
               PERFORM EMAIL-ERROR
           END-IF.
    
           STOP RUN.
    
  16. Para el ejemplo ilustrativo, se muestra un mensaje de error. En esta sección debe ser tratado el error:

    1
    2
    3
           EMAIL-ERROR.
               DISPLAY "Email error".
               STOP RUN.
    
  17. Estas son algunas de las pruebas realizadas con el programa:

    Tabla 1. Salida obtenida luego de ejecutar el programa para diferentes datos de entrada.
    Correo electrónico Correo electrónico válido

    admin

    Error

    admin@

    Error

    @domain.com

    Error

    admin@domain.com

    admin@domain.com

    admin+1234@domain.com

    admin@domain.com

Descargas

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

  1. cobolemail.cbl contiene las validaciones de correo electrónico explicadas anteriormente.




Haz un comentario

Estado de los servicios - Términos de Uso