Joven hacker sonriendo

Liberar Recursos

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en COBOL al liberar recursos. Al liberar recursos que no están siendo utilizados se mejora el rendimiento de la aplicación y la experiencia del usuario.

Necesidad

Liberar recursos abiertos 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. El programa hace uso de archivos o cursores SQL.

  3. El código debe cerrar los recursos que utiliza[1].

Solución

La sentencia CLOSE en COBOL permite cerrar varios tipos de recursos, entre los cuales se incluyen archivos y cursores de la base de datos.

  • Liberar archivos

    1. Los archivos en COBOL se deben cerrar usando la sintaxis[2],[3]:

      1
             CLOSE descriptor
      
    2. Se define la división IDENTIFICATION DIVISION[4],[5]:

      cobolclsf.cbl
      1
      2
      3
      4
      5
             IDENTIFICATION DIVISION.
            ******************
            * Identification *
            ******************
             PROGRAM-ID. COBOLCLSF.
      

      Se establece el nombre del programa a COBOLCLSF mediante la sentencia PROGRAM-ID.

    3. En la división ENVIRONMENT DIVISION[6] y dentro de la sección INPUT-OUTPUT SECTION, se declara el uso del descriptor TEST-FILE el cual es asignado al archivo TESTFILE:

      1
      2
      3
      4
      5
      6
      7
      8
            ***************
            * Environment *
            ***************
             ENVIRONMENT DIVISION.
             INPUT-OUTPUT SECTION.
             FILE-CONTROL.
                 SELECT TEST-FILE ASSIGN TO 'TESTFILE'
                 ORGANIZATION IS SEQUENTIAL.
      
    4. En la división DATA DIVISION[7] y dentro de la sección FILE SECTION, se establece el formato del archivo:

      1
      2
      3
      4
      5
      6
      7
      8
            ********
            * Data *
            ********
             DATA DIVISION.
      
             FILE SECTION.
             FD TEST-FILE.
             01 TEST-FILE-RECORD PIC X(32).
      
    5. En la división PROCEDURE DIVISION[8] se encuentra la lógica del programa:

      1
      2
      3
      4
      5
            ********
            * Main *
            ********
             PROCEDURE DIVISION.
             MAIN.
      
    6. Abrimos el archivo en modo EXTEND, lo que permite agregar al final del mismo el contenido:

      1
             OPEN EXTEND TEST-FILE.
      
    7. A continuación, se mueve la cadena "Hola mundo" al registro. Esta operación debe ser realizada luego de abrir el archivo:

      1
             MOVE "Hola mundo" TO TEST-FILE-RECORD.
      
    8. Se escribe el contenido:

      1
             WRITE TEST-FILE-RECORD.
      
    9. Además, todo archivo abierto debe ser cerrado:

      1
             CLOSE TEST-FILE.
      
    10. Por último, se detiene la ejecución del programa:

      1
             STOP RUN.
      
  • Liberar cursores

    1. Se inicia la solución definiendo la división IDENTIFICATION DIVISION:

      cobolclsc.cbl
      1
      2
      3
      4
      5
             IDENTIFICATION DIVISION.
            ******************
            * Identification *
            ******************
             PROGRAM-ID. COBOLCLSC.
      
    2. En la división DATA DIVISION se declara la variable para almacenar el nombre de usuario que obtenemos de la base de datos. Igualmente se copia la estructura de datos SQLCA que tiene como propósito recibir los mensajes de error producidos por las sentencias:

      1
      2
      3
      4
      5
      6
      7
      8
      9
            ********
            * Data *
            ********
             DATA DIVISION.
      
             WORKING-STORAGE SECTION.
             01 WS-USERNAME PIC X(64) VALUE "".
      
             COPY SQLCA OF QSYSINC-QCBLLESRC.
      
    3. Dentro de la división PROCEDURE DIVISION se declara inicialmente el cursor C1:

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
            ********
            * Main *
            ********
             PROCEDURE DIVISION.
             MAIN.
                 EXEC SQL
                     DECLARE C1 CURSOR FOR
                     SELECT usuario
                     FROM SQLTEST
                 END-EXEC.
      
    4. Abrimos el cursor y obtenemos el contenido del primer registro:

      1
      2
      3
      4
      5
      6
      7
             EXEC SQL
                 OPEN C1
             END-EXEC.
      
             EXEC SQL
                 FETCH C1 INTO :WS-USERNAME
             END-EXEC.
      
    5. Se muestra el nombre del usuario obtenido:

      1
             DISPLAY "Nombre de usuario: " WS-USERNAME
      
    6. Finalmente, el proceso de cierre de cursores es realizado automáticamente al finalizar cada programa en COBOL, pero se debe realizar en el código por seguridad y para mantener compatibilidad entre diferentes plataformas:

      1
      2
      3
             EXEC SQL
                 CLOSE C1
             END-EXEC.
      
    7. Por último, se finaliza el programa:

      1
             STOP RUN.
      

Descargas

Puedes descargar el código fuente pulsando en los siguientes enlaces:

  1. cobolclsf.cbl contiene instrucciones para cerrar correctamente un recurso abierto tal como se explicó antes.

  2. cobolclsc.cbl contiene instrucciones para cerrar correctamente un cursor abierto tal como se explicó antes.




Haz un comentario

Estado de los servicios - Términos de Uso