Post

La sicurezza in PHP – parte quarta [SESSIONI]

In sicurezza on maggio 6, 2010 by poyblog Messo il tag: , ,

Nell’articolo http://poyblog.wordpress.com/2010/04/14/sicurezza-del-linguaggio-javascript-metodologie-di-attacco/ avevo già accennato ad un tipo di attacco detto CSRF (Cross Site Request Forgery), che consiste nel “forgiare” sessioni di autenticazione attive grazie all’utilizzo di determinate URL cui un ignaro utente si sottopone.

In questo modo un hacker, contraffacendo la sessione di un utente può utilizzare la credenziali del malcapitato per eseguire delle operazioni in un’area privata , come un e-commerce per esempio.

Innanzitutto questa tecnica di attacco colpisce solo gli utenti che sono in un tale momento connessi ed autenticati.

Esiste comunque un metodo per rendere più complicato l’attacco CSRF , ovvero l’utilizzo di un token, generato pseudo-casualmente ed inserito nella variabile di sessione al momento della avvenuta autenticazione.

Tale valore dovrà poi essere presente in ogni pagina “privata” permettendo un confronto ad ogni visualizzazione fra il valore nella variabile sessione ed il valore della pagina corrente.

Quindi ogni pagina privata avrà un campo hidden del tipo:

<input type=’hidden’ name=’token’ value=’<?php echo $token ?>’/>

e a ogni caricamento di una pagina privata, prima di eseguire qualsivoglia operazione verrà eseguito un controllo del tipo:

if (isset ($_SESSION['token']) && isset($_POST['token']) && $_POST['token'] == $_SESSION['token']){

// Eseguo le operazioni della area riservata dato che il token è valido

}

Un altro attacco cui sono sottoposte le sessioni è il “session fixation”. In questo caso un utente potrebbe con l’utilizzo della variabile PHPSESSID forzare la propria sessione con una già esistente e associata ad un altro utente. Per superare questo inconveniente sarebbe innanzitutto conveniente cambiare il valore di default del cookie di sessione (da PHPSESSID a qualcos’altro ) e rigenerare in modo assiduo il valore della sessione con la funzione regenerate_id() soprattutto in fase di autenticazione

Session hijacking è un attacco grazie al quale un attaccante riesce a reperire l’ID di sessione di un malcapitato. In questo caso il controllo è più complicato, ma esistono delle tecniche di protezione che limitano l’efficacia di questo attacco. Per esempio se il server che emette la variabile di sessione controllasse anche l’ HTTP_USER_AGENT del client, nel caso in cui questo cambiasse durante una sessione, allora la sessione dovrebbe chiudersi e richiedere il login all’utente.

Purtroppo se l’attaccante sfrutta il medesimo browser il nostro controllo verrà superato.

Lascia un Commento

Fill in your details below or click an icon to log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Log Out / Modifica )

Foto Twitter

You are commenting using your Twitter account. Log Out / Modifica )

Foto di Facebook

You are commenting using your Facebook account. Log Out / Modifica )

Connecting to %s

Iscriviti

Get every new post delivered to your Inbox.