Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + automatización eficaz

Usar Estructuras Condicionales

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en COBOL al contemplar todos los escenarios posibles en una estructura condicional que pueda dar origen a comportamientos erróneos dentro de la aplicación.

Necesidad

Usar estructuras condicionales contemplando todos los escenarios posibles y valores por defecto en COBOL.

Contexto

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

  1. Se dispone de una aplicación desarrollada en COBOL.

  2. El código debe ser invocado en algún escenario[1].

  3. El código debe de inicializar las variables que se crean[2].

Solución

  1. En cada estructura condicional empleada en una aplicación COBOL, se recomienda contemplar todos los posibles escenarios como se muestra en esta entrada. A continuación, se inicia la aplicación de prueba declarando la división IDENTIFICATION DIVISION:

    cobolcond.cbl
    1
    2
    3
    4
    5
           IDENTIFICATION DIVISION.
          ******************
          * Identification *
          ******************
           PROGRAM-ID. COBOLCOND.
    

    En el anterior bloque de código, mediante la sentencia PROGRAM-ID se estable el nombre del programa a COBOLCOND.

  2. La división de datos DATA DIVISION contiene dos variables: PLANET-NUMBER de tipo numérico con dos dígitos y PLANET-NAME con soporte para ocho caracteres. Además, en cumplimiento del requisito: "El código debe de inicializar las variables que crea.", se deben inicializar todos los valores de las variables a través del uso de la palabra clave VALUE. Para este caso, "3" y "Tierra" son los valores iniciales para las variables PLANET-NUMBER y PLANET-NAME respectivamente:

    1
    2
    3
    4
    5
    6
    7
    8
          ********
          * Data *
          ********
           DATA DIVISION.
           WORKING-STORAGE SECTION.
           01 PLANET.
               05 PLANET-NUMBER PIC 9(2) VALUE 3.
               05 PLANET-NAME   PIC X(8) VALUE "Tierra".
    
  3. En la división PROCEDURE DIVISION se encuentra la lógica del programa:

    1
    2
    3
    4
    5
          ********
          * Main *
          ********
           PROCEDURE DIVISION.
           MAIN.
    
  4. En un ciclo escogemos los planetas impares (El valor inicial del número es 3 por lo que al ir sumando 2 vemos los impares), mostramos su número y su nombre. En la primer visualización, el programa debe imprimir los valores por defecto inicializados en la división DATA DIVISION:

    1
    2
    3
    4
           DISPLAY PLANET-NUMBER, " - ", PLANET-NAME.
    
           PERFORM 3 TIMES
               COMPUTE PLANET-NUMBER = PLANET-NUMBER + 2
    
  5. Con la palabra clave EVALUATE[3],[4] se determina el nombre del planeta según su número, note como se toma en cuenta el escenario por defecto a través de la palabra clave OTHER (El escenario por defecto es cuando el número no coincide con el de algún planeta):

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
               EVALUATE PLANET-NUMBER
                   WHEN 1 MOVE "Mercurio" TO PLANET-NAME
                   WHEN 2 MOVE "Venus   " TO PLANET-NAME
                   WHEN 3 MOVE "Tierra  " TO PLANET-NAME
                   WHEN 4 MOVE "Marte   " TO PLANET-NAME
                   WHEN 5 MOVE "Jupiter " TO PLANET-NAME
                   WHEN 6 MOVE "Saturno " TO PLANET-NAME
                   WHEN 7 MOVE "Urano   " TO PLANET-NAME
                   WHEN 8 MOVE "Neptuno " TO PLANET-NAME
                   WHEN OTHER MOVE "Invalido" TO PLANET-NAME
               END-EVALUATE
    
               DISPLAY PLANET-NUMBER, " - ", PLANET-NAME
           END-PERFORM.
    
  6. Por medio de la instrucción ACCEPT se obtiene el número ingresado por el usuario:

    1
    2
           DISPLAY "Ingrese un numero de planeta".
           ACCEPT PLANET-NUMBER.
    
  7. Usando el condicional IF[5],[6] se determina el tipo de planeta, observe nuevamente como se deben considerar todos los escenarios por defecto a través del uso de la sentencia ELSE:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
           IF PLANET-NUMBER IS >= 1 AND PLANET-NUMBER IS <= 8
               IF PLANET-NUMBER IS < 5
                   DISPLAY "Planeta interior"
               ELSE
                   DISPLAY "Planeta exterior"
               END-IF
           ELSE
               DISPLAY "Tipo de planeta desconocido"
           END-IF
    
           STOP RUN.
    
  8. La salida para el anterior programa es la siguiente:

    1
    2
    3
    4
    5
    6
    7
           03 - Tierra
           05 - Jupiter
           07 - Urano
           09 - Invalido
           Ingrese un numero de planeta
           10
           Tipo de planeta desconocido
    

Descargas

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

  1. cobolcond.cbl contiene la implementación del código anterior.




Haz un comentario

Estado de los servicios - Términos de Uso