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

Limitar tiempo de vida de recursos

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la creación, manipulación y eliminación correcta de recursos dentro de un programa PHP, evitando que información disponible en memoria pueda ser capturada por usuarios no autorizados.

Necesidad

Eliminar (limpiar) recursos dentro de la aplicación cuando ya no estén en uso.

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 PHP versión 7.0 o superior.

  2. El código debe eliminar información sensible en memoria.

  3. La aplicación debe liberar recursos cuando ya no estén en uso,[1] limitando así su tiempo de vida.

Solución

PHP es un lenguaje de programación que ofrece gran variedad de opciones al momento de procesar ficheros. En este artículo veremos dos de ellas, la primera mediante la instrucción fopen y la segunda mediante fread.

  • Lectura segura de ficheros con fopen:

    1. En primer lugar se declara la variable $myresource, la cual, contiene la referencia o ubicación al fichero a ser leído:

      fopen.php
      1
      2
      <?php
        $myresource = fopen("test.txt","r");
      

      Como se observa, en esta ocasión fopen recibe dos parámetros: el primero corresponde a la ruta donde está almacenado el fichero a procesar, y el segundo corresponde al tipo de acceso al mismo. En este caso el valor es "r", lo cual indica acceso de sólo lectura. En el siguiente enlace podrá encontrar mayor información sobre el método fopen.

    2. Mediante el método feof y dentro de un ciclo while, se verifica que no se ha llegado al final del fichero a leer:

      1
      while (!feof($myresource)) {
      
    3. Leemos línea por línea el contenido del recurso y lo imprimimos en pantalla:

      1
      2
      3
        $line = fgets($myresource);
        echo $line;
      }
      
    4. Por último, una vez ha terminado el procesamiento del recurso, se procede a cerrar el flujo asociado al mismo:

      1
      2
        fclose($myresource);
      ?>
      

      Nota: PHP ofrece alternativas para validar si un fichero existe o si tiene los permisos suficientes para el acceso al mismo, para dicho propósito existen los métodos file_exists y is_readable, sin embargo, para efectos prácticos, dichos métodos no son necesarios debido a que fopen devuelve FALSE en caso de error, esto garantizará que el procesamiento de archivos solo se realice si el archivo se abre correctamente.

    5. Para ejecutar el anterior programa, desde la terminal se debe ubicar primero en el directorio del proyecto y ejecutar el comando php (se debe instalar previamente PHP):

      1
      2
      3
      $ ls
      fopen.php test.txt
      $ php fopen.php
      
    6. La salida en consola luego de ejecutar el programa es la siguiente (en este caso el contenido del fichero son contraseñas de prueba):

      1
      2
      3
      4
      Contrasenas:
      FLUIDtest
      admin123
      PHPTest
      
  • Lectura segura de ficheros con fread:

    1. Al igual que con fopen, en primer lugar se declara la variable $myfile, la cual, contiene la referencia o ubicación al fichero a ser leído:

      fread.php
      1
      2
      <?php
        $myfile = fopen("test.txt","r");
      

      Al igual que como se hizo anteriormente, establecemos acceso de solo lectura al fichero test.txt.

    2. Una vez abierto el recurso, se especifica los argumentos para el método fread:

      1
      $content = fread($myfile, filesize("test.txt"));
      

      El primer argumento corresponde al fichero a leer y el segundo especifica la cantidad de bytes a ser leídos. Con el fin de garantizar que todo el fichero sea procesado, se emplea el método filesize especificando el fichero en cuestión. Dicha función se detendrá al final del archivo o cuando alcance la longitud especificada, lo que ocurra primero.

    3. Por último, cerramos el flujo asociado al recurso y se imprime el contenido de la variable $content en pantalla:

      1
      2
      3
        fclose($myfile);
        print $content;
      ?>
      
    4. La salida en consola, será la misma que la obtenida para fopen.

Descargas

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

  1. fopen.php contiene código PHP utilizando el método fopen para la manipulación segura de ficheros.

  2. fread.php contiene código PHP utilizando el método fread para la manipulación segura de ficheros.




Haz un comentario

Estado de los servicios - Términos de Uso