Proteger los datos expuestos en sesión en php

RECU-0557 (Recurso Ejemplo)

Descripción

PHP almacena los datos de la sesión por defecto en el directorio /tmp. Lo realiza así para asegurarse que cualquier usuario tiene permiso de escritura en él. Aunque los usuarios no pueden leer de este directorio los ficheros de sesión directamente, si pueden crear un script para ello. Por ejemplo, el siguiente script busca session.save_path por los ficheros que empiezan por la cadena "sess_" , cuando encuentra un fichero, su contenido es impreso mediante print_r( ). De esta forma, un desarrollador puede ver los datos de la sesión de otros usuarios.

Para evitar este problema se debe optar por cifrar los datos sensibles de la sesión o guardarlos en una base de datos protegida con un nombre de usuario y contraseña.

El acceso a una base de datos está controlado, proporcionando una capa extra de protección. La base de datos puede ser utilizada como un refugio seguro para los datos sensibles, aunque debe permanecer alerta ante el hecho de que la seguridad de la base de datos se vuelve aún más importante.

Ejemplos

<?php
   header('Content-Type: text/plain');
   session_start();
   $path = ini_get('session.save_path');
   $handle = dir($path);
   while ($filename = $handle->read())
   {
      if (substr($filename, 0, 5) == 'sess_')
      {
         $data = file_get_contents("$path/$filename");
         if (!empty($data))
         {
              session_decode($data);
             $session = $_SESSION;
             $_SESSION = array();
             echo "Session [" . substr($filename, 5) . "]\n";
             print_r($session);
             echo "\n--\n\n";
         }
      }
    }
?>

Contenidos relacionados

Pautas
Área: Desarrollo » Seguridad » Gestión de Sesiones y Usuarios
Código Título Tipo Carácter
LIBP-0311 Gestión de la sesión Libro de pautas Directriz Obligatoria