Consigli sulla sicurezza con le sessioni

Indice

Nonostante la sua semplicità d’uso, ci sono tuttavia dei procedure che usandole possono andare storte. Ecco una breve panoramica di alcune tecniche sulla sicurezza ch’è possibile utilizzare per garantire il suo stato usando le sessioni in modo sicuro.
Time-Outs delle sessioni

Il timing-out delle sessioni è un’azione molto importante se si ha a che fare con utenti collegati al sito web o ad una applicazione. Se un utente accede a un sito da un internet café e poi lascia il computer e il locale senza aver fatto il log out dell’accesso che ha fatto al sito web, come si fa a bloccare l’utente successivo se su quello stesso computer continua ad avere l’accesso alla sessione dell’utente precedente? Si può usare, per esempio, il seguente codice:
Copia codice

<?php
session_start();
// configura il periodo di time-out in secondi
$inactive = 600;
// controlla se la variabile $_SESSION["timeout"]
// è presente
if (isset($_SESSION["timeout"])) {
    // calcolare il "tempo di vita" della sessione
    $sessionTTL = time() - $_SESSION["timeout"];
    if ($sessionTTL > $inactive) {
        session_destroy();
        header("Location: /logout.php");
    }
}
$_SESSION["timeout"] = time();
?>
Il codice garantisce che se non vi è alcuna attività per più di 600 secondi (10 minuti), la richiesta viene allora reindirizzata alla pagina di logout che sarebbe il logout volontario dell’utente.
Rigenerare l'ID della sessione
La funzione session_regenerate_id() crea un nuovo e unico ID per rappresentare la sessione dell’utente corrente. Questo dovrebbe essere rigenerato al momento che ogni azione importante di autenticazione venga eseguita, come il log-in o l’aggiornamento dei dati del profilo utente. Dare alle sessioni un nuovo ID dopo tali azioni rende l’applicazione più sicura, riducendo il rischio di un attacco specifico conosciuto come “Session Hijacking“.
Copia codice

<?php
session_start();
if ($_POST["username"] == "admin" && $_POST["password"] == sha1("password")) {
    $_SESSION["authorized"] = true;
    session_regenerate_id();
}
?>
Distruzione delle sessioni
Come ho accennato in precedenza, si dovrebbe utilizzare la funzione session_destory() una volta che non si ha più bisogno di utilizzare la sessione. Questo impedisce agli aggressori di dirottare la sessione in stallo e aumenta la sicurezza della relativa sessione del sito web.
Utilizzare l'archiviazione permanente
Utilizzare un database per memorizzare i dati al primo momento che si sa che i dati incominciano a essere persistenti: non lasciare per troppo tempo la sessione aperta perché sono fonti di possibili attacchi. I dati che dovrebbero essere conservati nella variabile $_SESSION, sono quelle i cui dati di sessione sono destinate ad essere transitorie.