JWT vs Sesiones

1

Tengo una aplicación PHP, actualmente es altamente dependiente de las sesiones. Estoy tratando de eliminar la mayoría, si no todo, el uso de la sesión.

Cuando se trata de iniciar sesión en un usuario. Tengo algunas opciones,

  1. continuar usando sesiones para almacenar datos básicos del usuario.
  2. generar mi propio token basado en cookies, que apunta a un ID de información almacenada en memcache con datos básicos del usuario, para verificar el usuario
  3. genere el token JWT, se almacena en una cookie y se usa para almacenar una ID que apunta a la información en memcache para verificar el usuario.

Básicamente, estoy tratando de evitar problemas como el secuestro de sesiones, etc., pero no estoy seguro de que la implementación de un sistema JWT sea tan útil como pensé al principio.

Parece que hay mucho escrito sobre las ventajas de JWT, pero igualmente, hay mucho escrito sobre "no usar JWT para las sesiones"

Dado que no estoy planeando almacenar datos reales del usuario en el token de JWT, solo una ID, ¿esto tiene muchas ventajas sobre una ID de sesión de PHP estándar?

La principal ventaja que veo es que puedo asegurar que no se manipule, pero que aún así podría sufrir un secuestro dado que está almacenada en una cookie.

Asegurar que la cookie sea HTTP_Only ayudaría sin duda en algunos aspectos.

Entonces, desde el punto de vista de la seguridad, ¿cuál es el método más confiable y menos propenso a los problemas de seguridad para almacenar lo que básicamente es un ID de sesión almacenado en otro formato?

    
pregunta Charlie Smith 31.10.2016 - 02:30
fuente

1 respuesta

5

Tienes que preguntarte contra qué tratas de protegerte (mencionaste problemas como el secuestro de sesiones) y en qué entorno.

Si solo desea almacenar un identificador de sesión en el lado del cliente, JWT no le proporciona nada, que ya no se proporciona en las sesiones típicas basadas en cookies.

El problema que resuelve JWT es que los datos de la sesión pueden, si su servicio es muy popular, poner presión en su servidor. Con JWT, los datos de la sesión se almacenan en el lado del cliente, por lo que el servidor no necesita realizar un seguimiento del estado (por lo que algunas personas dicen que JWT no tiene estado), descargando así la carga al cliente . Sin embargo, mantener el estado en el lado del cliente introduce muchas complejidades adicionales.

Mantener el estado en el lado del servidor es el patrón clásico. Este patrón se comprende bien y, a lo largo del tiempo, los diversos problemas se han resuelto. Implementar una sesión basada en cookies es bastante sencillo. Las cookies también incluyen algunas medidas de protección adicionales en comparación con los encabezados "simples", como las marcas http_only y secure_only .

En general, las personas de seguridad son bastante cautelosas al adaptar nuevas implementaciones brillantes; Les gusta colocar su dinero en patrones bien entendidos y comprobados. Entonces, mientras JWT está bastante de moda en este momento, eso no los convierte en una mejor solución de seguridad. Para su aplicación web típica, le recomendaría, sin lugar a dudas, utilizar sesiones basadas en cookies.

    
respondido por el Jacco 31.10.2016 - 11:03
fuente

Lea otras preguntas en las etiquetas