Cómo leer una cookie HttpOnly usando JavaScript

90

¿Existe alguna forma de leer una cookie segura con JavaScript?
Traté de hacerlo usando document.cookiey, por lo que puedo ver en este artículo sobre cookies seguras y la marca HttpOnly , no puedo acceder a una cookie segura de esta manera.

¿Alguien puede sugerir una solución alternativa?

tzam
fuente
1
De wiki : una cookie segura solo se usa cuando un navegador visita un servidor a través de HTTPS.
Pavel Hodek
6
@Pavel Hodek Esa es la bandera incorrecta. La bandera de cookie "segura" no tiene nada que ver con la bandera de seguridad HTTPOnly. Tienen un sistema de nombres terrible.
torre el
1
El título de estas preguntas debería cambiarse para incluir el indicador "HttpOnly". Tal como está, parece que la pregunta es sobre el indicador "Seguro".
Tom

Respuestas:

125

Los diferentes navegadores habilitan diferentes medidas de seguridad cuando se establece el indicador HTTPOnly . Por ejemplo, Opera y Safari no impiden que JavaScript escriba en la cookie. Sin embargo, la lectura siempre está prohibida en la última versión de los principales navegadores.

Pero, lo que es más importante, ¿por qué quiere leer una HTTPOnlycookie? Si es un desarrollador, simplemente desactive la marca y asegúrese de probar su código para xss. Le recomiendo que evite deshabilitar esta bandera si es posible. La HTTPOnlybandera y la "bandera segura" (que obliga a que la cookie se envíe a través de https) siempre deben estar configuradas.

Si eres un atacante , querrás secuestrar una sesión . Pero hay una manera fácil de secuestrar una sesión a pesar de la HTTPOnlybandera. Todavía puede seguir la sesión sin conocer la identificación de la sesión. El gusano MySpace Samy hizo precisamente eso. Usó un XHR para leer un token CSRF y luego realizar una tarea autorizada. Por lo tanto, el atacante podría hacer casi cualquier cosa que pudiera hacer el usuario registrado.

La gente tiene demasiada fe en la HTTPOnlybandera, XSS aún puede ser explotable. Debe establecer barreras alrededor de las funciones sensibles. Por ejemplo, el cambio de contraseña archivado debe requerir la contraseña actual. La capacidad de un administrador para crear una nueva cuenta debería requerir un captcha, que es una técnica de prevención de CSRF que no se puede omitir fácilmente con un XHR .

torre
fuente
¿Podría dar más detalles sobre el asunto del gusano? Ese enlace no funciona y tampoco entendí mucho de Internet. Gracias.
Abhishek Jebaraj
@Abhishek Jebaraj Si no comprende el gusano sammy o los tokens CSRF, intente primero comprender los límites de la política
torre
Quiero obtener la fecha de vencimiento de una cookie solo http, ¿cómo puedo hacerlo
PirateApp
50

El objetivo de las cookies HttpOnly es que no se puede acceder a ellas mediante JavaScript.

La única forma (excepto para aprovechar los errores del navegador) para que su script los lea es tener un script cooperativo en el servidor que lea el valor de la cookie y lo repita como parte del contenido de respuesta. Pero si puede hacerlo y lo haría, ¿por qué usar cookies HttpOnly en primer lugar?

Ilmari Karonen
fuente
Es posible que desee probarlo para saber si el navegador del usuario maneja HttpOnly para las cookies correctamente antes de permitir que el usuario use su sitio desde el navegador en particular. Estoy buscando un ejemplo que pueda asegurar la compatibilidad del navegador con la bandera HttpOnly. MS también recomienda hacerlo, pero no hay más consejos sobre cómo: Mitigar XSS con HttpOnly
Ursegor
Encontré que aconsejan la lista blanca de la versión del navegador. Podría estar equivocado, pero ¿no sería una forma conveniente de verificar el soporte de javascript? ¿Podría sugerir algún inconveniente en esto?
Ursegor
-7

Una de las formas es usar el inspector web safari, y en la pestaña de almacenamiento puede ver todas las cookies, httpOnly o no, y simplemente seleccionar la cookie Comando + C, para copiarla.

Una vez que tenga la cadena, puede analizarla fácilmente con cualquier analizador de cookies o javascript simple.

ingrese la descripción de la imagen aquí

pankajdoharey
fuente
1
FF y Chrome también pueden hacer esto. No son lo mismo que OP quiere.
imba-tjd
@ imba-tjd Bueno, tienes razón, pero yo estaba usando Safari en ese momento, así que podría dar fe de ello.
pankajdoharey
Es como si respondieras a alguien que pregunta "¿Cómo obtengo la entrada del usuario?" Con "Pregúntale y luego configúralo en tu código".
Forumulator