Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + automatización eficaz

Manejar Errores en Operaciones Aritméticas

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en COBOL al manejar adecuadamente los errores en las operaciones aritméticas. Las operaciones aritméticas son susceptibles a eventos excepcionales que pueden filtrar información sensible.

Necesidad

Manejar errores en operaciones aritméticas 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. La aplicación realiza operaciones aritméticas con las instrucciones ADD, SUBTRACT, MULTIPLY, DIVIDE, o COMPUTE.

  3. El código sólo debe realizar las funciones para las cuales fue diseñado y no acciones colaterales[1].

  4. El sistema debe evitar difundir información sensible al momento de ocurrir un evento excepcional[2].

Solución

  1. Las operaciones aritméticas pueden causar ciertos tipos de error que generalmente resultan en mensajes MCH. Al usar las instrucciones ADD, SUBTRACT, MULTIPLY, DIVIDE o COMPUTE, es posible controlar estos errores mediante el uso de la instrucción ON SIZE ERROR.

  2. Las siguientes condiciones son manejadas a través de la instrucción ON SIZE ERROR:

    • La longitud del resultado de la operación aritmética es mayor a la longitud del número que lo contiene.

    • División por cero.

    • Cero elevado a la cero.

    • Cero elevado a un número negativo.

    • Número negativo elevado a un fraccionario.

    • Desbordamiento de números flotantes.

  3. A continuación podrá evidenciar el uso de la instrucción ON SIZE ERROR:

    • Se define la división IDENTIFICATION DIVISION[3],[4].

      cobolonsz.cbl
      1
      2
      3
      4
      5
             IDENTIFICATION DIVISION.
            ******************
            * Identification *
            ******************
             PROGRAM-ID. COBOLONSZ.
      
    • La división de datos contendrá la variable W01-TOTALAMOUNT, la cual tiene como propósito almacenar el monto total de una persona en el banco (note como la longitud del dato es de 6 dígitos).

      1
      2
      3
      4
      5
      6
      7
            ********
            * Data *
            ********
             DATA DIVISION.
      
             WORKING-STORAGE SECTION.
             01 W01-TOTALAMOUNT PIC 9(06) VALUE 0.
      
    • A continuación, se define la división PROCEDURE DIVISION[5] donde inicia el programa.

      1
      2
      3
      4
      5
            ********
            * Main *
            ********
             PROCEDURE DIVISION.
             MAIN.
      
    • Luego se suma el monto total de $500.000, $400.000 y $300.000. El resultado es almacenado en W01-TOTALAMOUNT (Si ocurre una excepción, CALC-ERROR es el encargado de manejar el problema).

      1
      2
             ADD 500000 400000 300000 TO W01-TOTALAMOUNT
             ON SIZE ERROR PERFORM CALC-ERROR.
      
    • Se despliega en pantalla el monto total.

      1
      2
             DISPLAY W01-TOTALAMOUNT.
             STOP RUN.
      
    • En esta sección es posible tratar el desbordamiento como un error, para el ejemplo mostraremos una advertencia.

      1
      2
      3
             CALC-ERROR.
                 DISPLAY "Arithmetic overflow".
                 STOP RUN.
      
    • En este caso es mostrada la excepción debido a que la suma total del monto ($1.200.000), supera la longitud esperada en la variable W01-TOTALAMOUNT.

    • Se debe redefinir la variable con el objetivo de almacenar números más grandes.

      1
      2
      3
      4
      5
      6
      7
            ********
            * Data *
            ********
             DATA DIVISION.
      
             WORKING-STORAGE SECTION.
             01 W01-TOTALAMOUNT PIC 9(63) VALUE 0.
      

Descargas

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

  1. cobolonsz.cbl contiene todas las instrucciones COBOL con la variable W01-TOTALAMOUNT redefinida (sin desbordamiento).




Haz un comentario

Estado de los servicios - Términos de Uso