Encontré una clase de administración de sesión en PHP que encripta los datos de la sesión en la carpeta de almacenamiento de la sesión (es decir, /tmp
) y se puede descifrar más adelante en su script con una clave. Me preguntaba si es realmente necesario? Si ya está realizando una sesión de prevención de secuestro como este ejemplo (simplificado):
session_start();
if (isset($_SESSION['fingerprint']))
if ($_SESSION['fingerprint'] != md5($_SERVER['HTTP_USER_AGENT'].'SECRETSALT'))
exit; // prompt for password
else
$_SESSION['fingerprint'] = md5($_SERVER['HTTP_USER_AGENT'].'SECRETSALT');
¿Aún necesita cifrar los datos de su sesión? ¿O solo es necesario el cifrado si está almacenando información confidencial a través de sesiones (por ejemplo, información personal, número de CC, credenciales)?
Además, si está validando si un usuario ha iniciado sesión o no de una manera simple como esta:
// login.php
if ($_POST['password'] == $db_password)
{
$_SESSION['logged_in'] = true;
redirect_to_protected_area();
}
else
// show login again
// protected_area.php
if (!isset($_SESSION['logged_in']) OR !$_SESSION['logged_in'])
exit; // prompt for password
else
// show protected area
¿Qué daño se puede hacer si los datos de la sesión no están encriptados y un pirata informático vio los datos a simple vista (es decir, el hash md5 de la huella digital y el logged_in = true
)? ¿Puede realmente iniciar sesión él mismo o primero debe "crackear" el md5?
Nota: md5 se usó para simplificar el ejemplo, se utiliza un hashing mucho mejor en la vida real.