2010-10-16 5 views
8

He estado usando Flask desde hace un tiempo y realmente estoy disfrutando el marco. Una cosa que no entiendo es que en casi todos los demás lugares se habla de almacenar la sesión en el servidor y la identificación de la sesión en el cliente, que luego identificaría la sesión. Sin embargo, después de usar el matraz, no siento la necesidad de hacerlo. Guardar la sesión como una cookie en el cliente criptográficamente sirve para mi propósito y parece bastante seguro también. Lo único que no puedo ser para cifrar las claves de sesión para, por ejemplo:¿Por qué almacenar sesiones en el servidor en lugar de dentro de una cookie?

session['life'] = 'the great one' 

aparecería como

life='gfhjfkjdfa some encryption kj' 

en la cookie guardada en el cliente. Pero, ¿qué importa eso, ya que todavía está encriptado? Estoy seguro de que la gente aquí sabe cosas mucho mejor que yo, así que solicite a alguien que aclare :-)

Respuesta

14

Incluso si se encripta sus datos, el usuario todavía podría hacer retroceder su cookie a un estado anterior (a menos que inicie la codificación de una sola vez identificaciones, etc.)

por ejemplo, cookie dice que el usuario tiene 100 créditos, el usuario gasta 100 créditos, recibe una nueva cookie que dice que tiene 0 créditos. Podrían restaurar su cookie anterior (con 100 créditos).

Según cómo cifre la cookie, el usuario también puede eliminar claves, insertar datos falsos, etc.

+0

Gracias Nick! Pero de nuevo no se encargará de la encriptación. Por ejemplo, sesión [créditos] ] = 100 se guardaría como algo como credits = 'agfkalh alguna encriptación agakh'. Y si la clave secreta utilizada para encriptar la cookie es desconocida para el usuario y es bastante difícil, ¿cómo podría causar algún cambio? Quiero decir de seguro puede seguir eliminando claves e insertando datos falsos, pero mientras no pueda descifrar la cookie, ¿cómo podría crearse algún problema? – Rasmus

+6

Si 100 créditos están encriptados como credits = "abc", el usuario puede ver esto, y sabe que "abc" se descifrará a 100. No necesitan descifrarlo ellos mismos, así que pueden gastar todos los créditos, luego establecer los créditos en "abc" de nuevo. Hay formas de evitar esto , pero realmente no vale la pena la molestia cuando puedes simplemente almacenar los datos en el servidor. – Nick

+0

Gracias! .. eso era algo que estaba buscando en realidad, simplemente no se me pasó por la cabeza ... – Rasmus

7

Si los datos de la sesión son necesarios en el servidor, tiene sentido almacenarlos en el servidor. Mantiene baja la cantidad de datos enviados por el cliente. Además, las cookies tienen un límite en la cantidad de datos que pueden almacenar.

+0

+1 para obtener un resumen conciso y conciso. –

+0

Gracias Ned! pero en la mayoría de los casos no será tan insignificante. – Rasmus

+2

Pero sí, +1 ya que considero que esta es una razón válida que creo que puedo ignorar sin problemas en mi aplicación :-). Sin embargo, aún estoy esperando por más respuestas a esto. – Rasmus

6

Además de los puntos ya mencionados anteriormente

  1. Los usuarios pueden deshabilitar las cookies mediante la configuración del navegador. Una gran cantidad de escáneres antivirus también escanean y señalan las cookies como un riesgo debido a lo cual también puede dar lugar a cookies no permitidas en la computadora de los usuarios.

  2. El usuario puede eliminar las cookies incluso en la mitad de su sesión. (De hecho, inadvertidamente lo hice el otro día cuando uno de mis exámenes de PC enumeró las cookies de seguimiento ... y simplemente hice clic en "Limpiar" y todos se habían ido). En caso de que el usuario elimine las cookies, el estado de los usuarios se perderá.

Si utiliza cookies para administrar todo el estado, siempre depende del entorno del cliente y su configuración. Como tal, es probable que al menos necesite un mecanismo de recuperación en caso de que las cookies se eliminen/deshabiliten, etc. para que su aplicación funcione correctamente.

+0

Gracias InSane por responder, pero eso no era lo que realmente quería saber :-). Lo que quería saber era por qué almacenar cualquier información relacionada con la sesión en el servidor. Quiero decir, incluso si almacena variables de sesión en el servidor, tendría que almacenar la identificación de la sesión en el cliente en una cookie. Para responder a lo que ha dicho, al eliminar las cookies, el usuario se hace más daño a sí mismo a medida que pierde el sesión. En realidad, podría desconectarse si ha iniciado sesión en el sitio, o incluso podría perder algunos datos. En lo que se refiere a deshabilitar las cookies, creo que se debe trabajar en la reserva. Gracias – Rasmus

+1

@Alice - En realidad ese era el punto que estaba tratando de hacer. Básicamente, debe almacenar los datos relacionados con la sesión en el servidor porque almacenarlos en el cliente no es confiable debido a los ejemplos apuntados anteriormente. Cuando las cookies están deshabilitadas, el sessionid generalmente se pasa en una cadena de consulta, ya que es solo un valor. Las sesiones se pueden independizar en las cookies, incluso para la ID de sesión – InSane

+0

"el sessionid generalmente se pasa en una cadena de consulta porque es solo un valor" -Sí, eso suena bien..1 up ... Gracias – Rasmus

1

El Frasco de implementación SecureCookie usa no encripta los valores. Lo único que se garantiza es que el usuario no puede modificar la cookie sin conocer el secreto utilizado por la aplicación.

Cuestiones relacionadas