Mike W. dijo [Wed, Apr 15, 2009 at 05:17:54PM +0200]:
Las expiraciones por inactividad (y cuestiones similares) deben ser
verificadas en tus controladores (probablemente en
application_controller), no dependas de la expiración de la galleta.
No dependo de ella, ese es el problema. Yo hago log out, la cookie del
navegador se borra y la sesión se resetea. Cuando vuelvo a hacer log in,
la cookie generada es idéntica.
Ok… Vamos de nuevo sobre de ello. ¿Cómo estás guardando las sesiones
de tu usuario? Te recomiendo fuertemente no usar directamente la
galleta (vÃa ActionController::Cookies), sino que la sesión (vÃa el
atributo «session», disponible desde tus controladores). Lo único que
debes indicar a la sesión es la llave con que debe identificar a su
galleta - En mi caso, tengo esto al principio de application.rb:
Pick a unique cookie name to distinguish our session data from
others’
session :session_key => ‘_comas_session_id’
Y respecto a la interacción de galletas, no tienen nada que ver con
los datos que guardan - Entré, salà del sistema un par de veces. La
galleta fue invariablemente:
Cookie: lang=es; _comas_session_id=cc2195274c62855b7968d0ba5fb9d119
Desde el navegador, borré la galleta. Repito el baile, y ahora hace:
Cookie: lang=es; _comas_session_id=e615b9d4b1e72e6a933d23cb7d70e1a1
Guardo mis sesiones en la base de datos - Mi config/environment.rb
tiene:
Use the database for sessions instead of the file system
(create the session table with ‘rake db:sessions:create’)
config.action_controller.session_store = :active_record_store
config.action_controller.session = {
:session_key => “_comas_session_id”,
:secret => “9ffb62fa7055a3f4009b824be282fc38” }
Si revisas en la BD, en la tabla ‘sessions’, la galleta es el
session_id. A cada solicitud (aún si es sólo un ‘reload’) se actualiza
el atributo ‘data’ - Y, claro, la longitud de ‘data’ crece conforme
hagas cosas que se guarden en la sesión.
No me preocupa que alguien se la encuentre, si no más bien que la
capturen y se la queden. Es un ataque básico que el comportamiento
normal de rails tiene solucionado, ya que la cookie generada por una
aplicación rails varÃa de un login a otro (excepto en el caso de mi
aplicación claro).
…La galleta no tiene por qué variar de un login a otro - VarÃa de un
navegador a otro. No guardas ninguna información relativa al usuario
en la galleta, sino que dentro del atributo ‘data’ de la sesión a la
que se refiere ésta. Y, sÃ, si yo entro como ‘gwolf’ veinte veces
desde computadoras diferentes, las veinte veces mi galleta debe ser
distinta. Lo que tú notaste, claro, es digno de alarma. La galleta no
debe ser calculada en función de tu usuario!
Saludos,
–
Gunnar W. - [email protected] - (+52-55)5623-0154 / 1451-2244
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973 F800 D80E F35A 8BB5 27AF