Joven hacker sonriendo

Validar Datos en Variables

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en COBOL al explicar en detalle cómo se deben validar adecuadamente los diferentes tipos de datos ingresados por el usuario, los cuales pueden provocar un mal funcionamiento del sistema.

Necesidad

Validar el tipo de dato contenido en una variable 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. Los datos provenientes del usuario deben ser validados.

  3. Debe validarse la entrada de información antes de ser usada[1].

  4. Debe validarse la entrada de información en el servidor y no sólo en el cliente[2].

Solución

  1. Existen cinco tipos de condiciones simples que pueden ser usadas para tomar decisiones, una de ellas es la denominada condición de clase, con la cual podemos validar que el contenido de las variables pertenezcan al tipo de dato deseado y que la aplicación manejará.

  2. "La condición de clase determina cuando el contenido de un ítem es alfabético, alfabético con minúsculas, alfabético con mayúsculas, numérico o si contiene solo caracteres en el conjunto especificado en la cláusula "CLASS" como se define en el parágrafo SPECIAL-NAMES de la sección Environment"[3].

  3. Se da inicio a la aplicación definiendo la división IDENTIFICATION DIVISION[4]:

    cobolinput.cbl
    1
    2
    3
    4
    5
           IDENTIFICATION DIVISION.
          ******************
          * Identification *
          ******************
           PROGRAM-ID. COBOLINPUT.
    
  4. Definimos la división ENVIRONMENT DIVISION[5]:

    1
    2
    3
    4
          ***************
          * Environment *
          ***************
           ENVIRONMENT DIVISION.
    
  5. En SPECIAL-NAMES declaramos una nueva clase llamada WS-VALID-CHARSET, la cual se compone de las letras: A, B, C, D, x, y, z, S, T, 9 y espacio.

    1
    2
    3
    4
    5
           SPECIAL-NAMES.
               CLASS WS-VALID-CHARSET IS
                   'A' THRU 'D'
                   'x' THRU 'z'
                   'S' 'T' '9' ' '.
    
  6. Dentro de la division DATA DIVISION[6] definimos la variable W01-INPUT para obtener la entrada del usuario:

    1
    2
    3
    4
    5
    6
    7
          ********
          * Data *
          ********
           DATA DIVISION.
    
           WORKING-STORAGE SECTION.
           01 W01-INPUT PIC X(10).
    
  7. Dentro de la division PROCEDURE DIVISION[7] obtenemos la entrada del usuario y la almacenamos en la variable W01-INPUT:

    1
    2
    3
    4
    5
    6
          ********
          * Main *
          ********
           PROCEDURE DIVISION.
           MAIN.
               ACCEPT W01-INPUT.
    
  8. A continuación validamos cada tipo de dato, comenzando con el numérico (0-9):

    1
    2
    3
    4
    5
           IF W01-INPUT IS NUMERIC
               DISPLAY "Numeric"
           ELSE
               DISPLAY "Not numeric"
           END-IF.
    
  9. Alfabético (a-z, A-Z):

    1
    2
    3
    4
    5
           IF W01-INPUT IS ALPHABETIC
               DISPLAY "Alphabetic"
           ELSE
               DISPLAY "Not alphabetic"
           END-IF.
    
  10. Alfabético con minúsculas (a-z):

    1
    2
    3
    4
    5
           IF W01-INPUT IS ALPHABETIC-LOWER
               DISPLAY "Alphabetic lower"
           ELSE
               DISPLAY "Not alphabetic lower"
           END-IF.
    
  11. Alfabético con mayúsculas (A-Z):

    1
    2
    3
    4
    5
           IF W01-INPUT IS ALPHABETIC-UPPER
               DISPLAY "Alphabetic upper"
           ELSE
               DISPLAY "Not alphabetic upper"
           END-IF.
    
  12. Clase definida por el usuario (A-D, x-z, S, T, 9, ' '):

    1
    2
    3
    4
    5
    6
    7
           IF W01-INPUT IS WS-VALID-CHARSET
               DISPLAY "Charset valid"
           ELSE
               DISPLAY "Charset not valid"
           END-IF.
    
           STOP RUN.
    
  13. En la siguiente tabla podrá encontrar algunos casos de prueba:

    Tabla 1. Salida obtenida luego de ejecutar el programa para diferentes datos de entrada.
    Entrada Numérico Alfabético Alfabético minus Alfabético mayus Clase personalizada

    0000001234

    X

    admin

    X

    X

    Fluid Attacks

    X

    X

    ABCD

    X

    X

    X

    AxST BD9

    X

Descargas

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

  1. cobolinput.cbl contiene la implementación del código depurado anteriormente.




Haz un comentario

Estado de los servicios - Términos de Uso