EDIT: Ho cambiato il titolo di questo post da "Come gestire le sessioni in webapps?" a "Come proteggere i valori delle sessioni del negozio nelle applicazioni web?" come potrebbe essere fuorviante
Negli ultimi mesi mi sono imbattuto in scenari interessanti che mi hanno fatto riflettere su come gestire le sessioni di app Web.
Alcuni mesi fa ho letto di un SQL-Injection in Joomla 3.4 che consentirebbe a un utente malintenzionato di eseguire un dirottamento di sessione. Questo è possibile perché Joomla 3.4 memorizza nel database il valore della sessione di ogni utente che si connette a Joomla. Ciò che è interessante è che un paio di settimane fa ne ho eseguito alcuni sul dominio di un amico che ha costruito un loooot di tempo fa. Il suo sito web è così vecchio che sta ancora usando Joomla 1.1. Ho potuto trovare immediatamente una SQL-Injection in uno dei plug-in che ha installato, quindi mi sono ricordato del tavolo delle sessioni e l'ho cercato. L'ho trovato e ho cercato di mostrargli l'effetto della vulnerabilità. Il fatto è che ... non potevo. I valori memorizzati nel database sono diversi da quello ricevuto dal browser. Ho controllato il codice sorgente di Joomla e ho scoperto che Joomla 1.1 genera un numero pseudo-casuale, esegue alcune operazioni md5 con quel numero e invia al browser il numero pseudo-casuale e memorizza nel database il risultato delle operazioni md5. In questo modo, semplicemente non sono riuscito a eseguire un dirottamento di sessione.
Ho anche provato a informare la community Joomla a riguardo ma non lo fanno sembra preoccuparsene. Per me sembra abbastanza importante, un software di 10 anni non consentirebbe a un utente malintenzionato di eseguire un dirottamento di sessione nel caso in cui venga rilevata un'iniezione SQL durante la nuova versione.
Ho iniziato a chiedermi quale sarebbe il modo migliore per gestire i valori delle sessioni.
Perché archiviarli sul database?
Perché non usare semplicemente ciò che fornisce il linguaggio di programmazione back-end (come session_start
in php)?
Che cosa ne pensi?