¿Es seguro almacenar un JWT en sessionStorage? [duplicar]

4

Este artículo de Auth0 recomienda almacenar el JWT localmente en un almacenamiento local (o cookie). Sin embargo, este artículo de OWASP recomienda no contar ningún dato sensible localmente (ni siquiera SessionStorage)

Entonces, ¿es seguro almacenar el token JWT localmente o no?

    
pregunta Ghassan Karwchan 09.02.2018 - 22:00
fuente

2 respuestas

7

¡Qué extraño! Le hice básicamente la misma pregunta hace un mes.

Al final, decidimos que usar localstorage para el token JWT estaba bien, siempre y cuando hiciéramos lo siguiente en el nivel HTTP:

  • Asegúrese de que todo el sitio se sirvió a través de HTTPS
  • Asegúrese de utilizar HSTS
  • Asegúrese de que, una vez en vivo, solo se incluyó la URL de redireccionamiento real en las reglas Auth0, así como nuestro código fuente
    • Utilizamos el CLI angular. Resulta que, a pesar de la sacudida del árbol proporcionada por WebPack, las variables no utilizadas todavía aparecen en el código fuente compilado, por ejemplo, localhost:4200
    • Asegúrese de que no haya localhost URl en realidad en Auth0 (en la página de redireccionamiento permitida, para su cliente). Haga una cuenta Auth0 separada para la prueba
  • Agrega el encabezado X-Frame-Options a cada respuesta HTTP y configúralo en Denegar
  • Establezca X-XSS-Protection en 1
  • Establezca X-Content-Type-Options en nosniff
  • Asegúrese de que Política de seguridad de contenido esté restringida a su propio nombre de dominio, y de cualquier CDN del que esté recibiendo secuencias de comandos
  • Establezca Política de referencia en mismo origen
  • Limite la caducidad de JWT en Auth0 a 1 hora

Lo anterior le dará un A / A + en securityheaders.io , y evitará los ataques más comunes (alguien incrustando su sitio web en un iframe , y la extracción de datos de localstorage, por ejemplo).

    
respondido por el JMK 09.02.2018 - 23:45
fuente
1

Bueno, depende. Si tiene una vulnerabilidad XSS dentro de su aplicación, un atacante puede extraer y usar el JWT de su almacenamiento local.

Un método que he usado y creo que Auth0 indica es usar la cookie como almacenamiento JWT y usar las marcas Sólo HTTP y seguro de esta manera si tiene una vulnerabilidad XSS, la cookie no puede ser Lee y solo se transporta de forma segura. CSRF es un riesgo menor en estos días ya que todos los marcos modernos incluyen la mitigación de CSRF.

Esto significaría que la validación extrae el JWT de la cookie en el lado del servidor para validar. Mi opinión personal es utilizar una cookie como almacenamiento, ya que CSRF es más fácil de encontrar y mitigar en comparación con los ataques XSS que tienen una gran superficie de ataque.

    
respondido por el McMatty 09.02.2018 - 23:27
fuente

Lea otras preguntas en las etiquetas