Page 191 - Corso di PHP - Livello base
P. 191
session_regenerate_id();
E in genere va fatto dopo aver dato il via alla sessione con
session_start. La documentazione ufficiale di questa funzione si
trova all'indirizzo http://php.net/manual/en/function.session-
regenerate-id.php. Inoltre sarebbe bene che le direttive di cui
sopra, session.use_trans_sid e session.use_only_cookies,
fossero impostate rispettivamente a 0 e 1. Comunque l'utilizzo
di session_regenerate_id è di per sé già sufficiente per
difendersi. È quindi bene rigenerare spesso, anche prima che
l'utente abbia fatto login (inserendo quindi la funzione nella
pagina di login, per esempio).
Infine potremmo eseguire un controllo aggiuntivo sullo user
agent dell'utente (perché niente impedisce che uno stesso id di
sessione, come abbiamo visto, possa essere utilizzato da due
utenti diversi): questo consente anche di avere una difesa
contro attacchi di tipo “session sidejacking”. Attraverso questo
tipo di attacco, comunque difficile da mettere in atto, il
malintenzionato cerca di intercettare l'id di sessione
attraverso i pacchetti di rete che vengono scambiati tra il
server e il browser dell'utente. Per ovviare a questa minaccia
può essere utile fare in modo che l'accesso venga impedito nel
caso in cui lo user agent di chi richiede l'accesso al nostro sito
non corrisponda a quello dell'utente che ha effettuato il login.
Per fare questo abbiamo bisogno della variabile superglobale
$_SESSION: dovremo associare a essa il valore dell'elemento
HTTP_USER_AGENT della variabile superglobale
$_SERVER, meglio se codificato tramite funzione md5. Il
tutto nella pagina o nella funzione che consente il login:
$_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
191