JavaScript necesita acceso a las cookies si AJAX se usa en un sitio con restricciones de acceso basadas en cookies. ¿Funcionarán las cookies HttpOnly en un sitio AJAX?
Editar: Microsoft creó una forma de prevenir ataques XSS al deshabilitar el acceso de JavaScript a las cookies si se especifica HttpOnly. Firefox más tarde adoptó esto. Entonces mi pregunta es: si está utilizando AJAX en un sitio, como StackOverflow, ¿son una opción las cookies Http-Only?
Edición 2: Pregunta 2. Si el propósito de HttpOnly es evitar el acceso de JavaScript a las cookies, y aún puede recuperar las cookies a través de JavaScript a través del objeto XmlHttpRequest, ¿cuál es el objetivo de HttpOnly ?
Edición 3: Aquí hay una cita de Wikipedia:
Cuando el navegador recibe dicha cookie, se supone que debe usarla como de costumbre en los siguientes intercambios HTTP, pero no hacerla visible para los scripts del lado del cliente. [32] El
HttpOnly
indicador no forma parte de ningún estándar y no se implementa en todos los navegadores. Tenga en cuenta que actualmente no hay prevención de leer o escribir la cookie de sesión a través de una solicitud XMLHTTP. [33]
Entiendo que document.cookie
se bloquea cuando usas HttpOnly. Pero parece que aún puede leer los valores de las cookies en el objeto XMLHttpRequest, lo que permite XSS. ¿Cómo te hace HttpOnly más seguro que? ¿Al hacer cookies esencialmente solo de lectura?
En su ejemplo, no puedo escribirle document.cookie
, pero aún puedo robarle su cookie y publicarla en mi dominio usando el objeto XMLHttpRequest.
<script type="text/javascript">
var req = null;
try { req = new XMLHttpRequest(); } catch(e) {}
if (!req) try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {}
if (!req) try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
req.open('GET', 'http://stackoverflow.com/', false);
req.send(null);
alert(req.getAllResponseHeaders());
</script>
Edición 4: lo siento, quise decir que podía enviar XMLHttpRequest al dominio StackOverflow y luego guardar el resultado de getAllResponseHeaders () en una cadena, eliminar la cookie y luego publicarlo en un dominio externo. Parece que Wikipedia y ha.ckers están de acuerdo conmigo en esto, pero me encantaría ser reeducado ...
Edición final: Ahh, aparentemente ambos sitios están equivocados, esto es realmente un error en Firefox . IE6 y 7 son en realidad los únicos navegadores que actualmente son totalmente compatibles con HttpOnly.
Para reiterar todo lo que he aprendido:
- HttpOnly restringe todo el acceso a document.cookie en IE7 y FireFox (no estoy seguro acerca de otros navegadores)
- HttpOnly elimina la información de cookies de los encabezados de respuesta en XMLHttpObject.getAllResponseHeaders () en IE7.
- Los XMLHttpObjects solo se pueden enviar al dominio del que se originaron, por lo que no hay publicación de dominio cruzado de las cookies.
editar: es probable que esta información ya no esté actualizada.