Mi sono imbattuto in una classe di gestione delle sessioni in PHP che crittografa i dati della sessione nella cartella di archiviazione della sessione (ad esempio, /tmp
) e può essere decrittografata in un secondo momento nel tuo script utilizzando una chiave. Mi stavo chiedendo se è davvero necessario? Se già fai qualche prevenzione di hijack di sessione come questo (semplificato) esempio:
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');
Hai ancora bisogno di crittografare i tuoi dati di sessione? Oppure la crittografia è necessaria solo se si memorizzano informazioni sensibili tramite sessioni (ad es. Informazioni personali, numero cc, credenziali)?
Inoltre, se stai convalidando se un utente è loggato o meno in un modo semplice come questo:
// 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
Quale danno può essere fatto se i dati della sessione non sono crittografati e un hacker ha visto i dati in bella vista (ad esempio, l'hash md5 dell'impronta digitale e logged_in = true
). Può effettivamente accedere a se stesso o prima deve "crackare" l'MD5?
Nota: per semplificare l'esempio è stato utilizzato md5, nella vita reale viene utilizzato un algo di hashing molto migliore.