in

html – Almacenamiento local frente a cookies

apple touch icon@2

En el contexto de los JWT, Stormpath ha escrito un artículo bastante útil que describe las posibles formas de almacenarlos y las (des) ventajas correspondientes a cada método.

También tiene una breve descripción general de los ataques XSS y CSRF, y cómo puede combatirlos.

Adjunto algunos fragmentos breves del artículo a continuación, en caso de que su artículo se desconecte o su sitio deje de funcionar.

Problemas:

Se puede acceder al almacenamiento web (localStorage / sessionStorage) a través de JavaScript en el mismo dominio. Esto significa que cualquier JavaScript que se ejecute en su sitio tendrá acceso al almacenamiento web y, debido a esto, puede ser vulnerable a ataques de secuencias de comandos entre sitios (XSS). XSS en pocas palabras es un tipo de vulnerabilidad en la que un atacante puede inyectar JavaScript que se ejecutará en su página. Los ataques XSS básicos intentan inyectar JavaScript a través de entradas de formulario, donde el atacante envía una alerta (‘Estás pirateado’); en un formulario para ver si lo ejecuta el navegador y otros usuarios pueden verlo.

Prevención:

Para evitar XSS, la respuesta común es escapar y codificar todos los datos que no son de confianza. Pero esto está lejos de ser la historia completa. En 2015, las aplicaciones web modernas utilizan JavaScript alojado en CDN o infraestructura externa. Las aplicaciones web modernas incluyen bibliotecas de JavaScript de terceros para pruebas A / B, análisis de mercado / embudo y anuncios. Usamos administradores de paquetes como Bower para importar el código de otras personas a nuestras aplicaciones.

¿Qué pasa si solo uno de los scripts que usa está comprometido? Se puede incrustar JavaScript malicioso en la página y el almacenamiento web se ve comprometido. Estos tipos de ataques XSS pueden obtener el almacenamiento web de todos los que visitan su sitio, sin su conocimiento. Esta es probablemente la razón por la que un grupo de organizaciones aconseja no almacenar nada de valor ni confiar en ninguna información en el almacenamiento web. Esto incluye identificadores de sesión y tokens.

Como mecanismo de almacenamiento, Web Storage no aplica ningún estándar seguro durante la transferencia. Quien lea Web Storage y lo utilice debe hacer su debida diligencia para asegurarse de que siempre envía el JWT a través de HTTPS y nunca de HTTP.

Problemas:

Las cookies, cuando se utilizan con la marca de cookies HttpOnly, no son accesibles a través de JavaScript y son inmunes a XSS. También puede configurar el indicador de cookies seguras para garantizar que la cookie solo se envíe a través de HTTPS. Esta es una de las principales razones por las que las cookies se han aprovechado en el pasado para almacenar tokens o datos de sesión. Los desarrolladores modernos dudan en usar cookies porque tradicionalmente requerían que el estado se almacenara en el servidor, rompiendo así las mejores prácticas de REST. Las cookies como mecanismo de almacenamiento no requieren que el estado se almacene en el servidor si está almacenando un JWT en la cookie. Esto se debe a que JWT encapsula todo lo que el servidor necesita para atender la solicitud.

Sin embargo, las cookies son vulnerables a un tipo diferente de ataque: la falsificación de solicitudes entre sitios (CSRF). Un ataque CSRF es un tipo de ataque que se produce cuando un sitio web, correo electrónico o blog malicioso hace que el navegador web de un usuario realice una acción no deseada en un sitio de confianza en el que el usuario está actualmente autenticado. Se trata de una explotación de la forma en que el navegador maneja las cookies. Una cookie solo se puede enviar a los dominios en los que está permitida. De forma predeterminada, este es el dominio que originalmente configuró la cookie. La cookie se enviará para una solicitud independientemente de si está en galaxies.com o hahagonnahackyou.com.

Prevención:

Los navegadores modernos admiten la SameSite bandera, además de HttpOnly y Secure. El propósito de esta bandera es evitar que la cookie se transmita en solicitudes entre sitios, evitando muchos tipos de ataques CSRF.

Para navegadores que no son compatibles SameSite, CSRF se puede prevenir mediante el uso de patrones de token sincronizados. Esto suena complicado, pero todos los frameworks web modernos tienen soporte para esto.

Por ejemplo, AngularJS tiene una solución para validar que solo su dominio puede acceder a la cookie. Directamente de los documentos de AngularJS:

Al realizar solicitudes XHR, el servicio $ http lee un token de una cookie (de forma predeterminada, XSRF-TOKEN) y lo configura como un encabezado HTTP (X-XSRF-TOKEN). Dado que solo JavaScript que se ejecuta en su dominio puede leer la cookie, su servidor puede estar seguro de que el XHR proviene de JavaScript que se ejecuta en su dominio. Puede convertir esta protección CSRF en apátrida si incluye un xsrfToken Reclamación de JWT:

{
  "iss": "http://galaxies.com",
  "exp": 1300819380,
  "scopes": ["explorer", "solar-harvester", "seller"],
  "sub": "tom@andromeda.com",
  "xsrfToken": "d9b9714c-7ac0-42e0-8696-2dae95dbc33e"
}

Aprovechar la protección CSRF del marco de su aplicación web hace que las cookies sean sólidas para almacenar un JWT. CSRF también se puede prevenir parcialmente al verificar el encabezado HTTP Referer y Origin desde su API. Los ataques CSRF tendrán encabezados Referer y Origin que no están relacionados con su aplicación.

El artículo completo se puede encontrar aquí:
https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage/

También tienen un artículo útil sobre cómo diseñar e implementar mejor los JWT, con respecto a la estructura del token en sí:
https://stormpath.com/blog/jwt-the-right-way/

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

HTML: fuentes

gfg 200x200 min

du comando en Linux con ejemplos