EDITAR: Cambié el título de esta publicación de "¿Cómo administrar sesiones en aplicaciones web?" a "¿Cómo asegurar los valores de las sesiones de la tienda en webapps?" como podría haber sido engañoso
En los últimos meses encontré escenarios interesantes que me hicieron preguntarme cómo administrar las sesiones de aplicaciones web.
Hace algunos meses leí sobre un Inyección de SQL en Joomla 3.4 que permitiría a un atacante realizar un secuestro de sesión. Esto es posible porque Joomla 3.4 almacena en la base de datos el valor de la sesión de cada usuario que se conecta a Joomla. Lo que es interesante es que hace un par de semanas realicé un poco en el dominio de un amigo que él hizo hace mucho tiempo. Su sitio web es tan antiguo que todavía está usando Joomla 1.1. Inmediatamente pude encontrar una inyección SQL en uno de los complementos que instaló, así que recordé la tabla de sesiones y busqué eso. Lo encontré y traté de mostrarle el efecto de la vulnerabilidad. La cosa es que ... no pude. Los valores almacenados en la base de datos son diferentes de los que recibe el navegador. Revisé el código fuente de Joomla y resulta que Joomla 1.1 genera un número pseudoaleatorio, realiza algunas operaciones md5 con ese número, y envía al navegador el número pseudoaleatorio y almacena en la base de datos el resultado de las operaciones md5. De esta manera, simplemente no pude realizar un secuestro de sesión en absoluto.
También intenté informar a la comunidad de Joomla sobre esto, pero no lo hacen. Parece que se preocupa por eso. A mí me parece muy importante, un software de 10 años no permitiría a un atacante realizar un secuestro de sesión en caso de que se encuentre una inyección SQL mientras que la nueva versión lo haría.
Comencé a preguntarme cuál sería la mejor manera de administrar los valores de las sesiones.
¿Por qué almacenarlos en la base de datos?
¿Por qué no usar simplemente lo que proporciona el lenguaje de programación de back-end (como session_start
en php)?
¿Qué piensas al respecto?