ago 31 2008
HttpOnly Cookies
HttpOnly Cookies es una ampliación del estándar de gestión de cookies que se utiliza para prevenir el robo de cookies a través de ataques de tipo XSS (Cross Site Scripting). Fué propuesto e implementado inicialmente por Microsoft en Internet Explorer 6 (Año 2002). Aunque al principio no tuvo mucha aceptación, este último año ya lo han ido implementando otros navegadores como Opera 9.5 o Firefox 3.
Al definir una cookie como HttpOnly, lo que estamos haciendo es eliminar la posibilidad de que ésta pueda ser leida por el navegador a través de JavaScript. Es decir, los navegadores que soportan este estándar, gestionan las cookies de igual manera, solo que ocultan parte de los datos de variable document.cookie de JavaScript, lo que impide el robo de las cookies de sesión a través de ataques de tipo XSS.
Ejemplo de definición en una cabecera Http:
Set-Cookie: USER=123; expires=Wednesday, 09-Nov-99 23:12:40 GMT; HttpOnly
Me ha parecido una idea bastante buena que se debería adoptar como norma general para definir cookies, ya que, si nunca necesitamos acceder a ellas desde JavaScript, ¿por qué permitimos su acceso?. Si bien, las implicaciones de un ataque de tipo XSS son mucho mayores que el robo de cookies, nunca estará de más añadir esta limitación.
Hay un caso en el que la lectura de cookies a través de JavaScript sí que se suele utilizar bastante. Se utiliza para evitar otro tipo de ataque de tipo XSS, el CSRF (Cross Site Request Forgery). Se trata de enviar por duplicado la cookie de sesión en el envío de formularios (double cookie submission), la enviada automáticamente por http y otra a través de un campo input de tipo hidden. De esta forma desde el servidor se puede verificar que el formulario no ha sido enviado desde un sitio externo al que el usuario está navegando. Para este caso, no sería totalmente necesario leer la cookie, se puede utilizar un token de sesión gestionado desde el servidor para el envío del formulario.
Hay que destacar también que en estos momentos esta opción está todavía un poco verde, ya que tanto Firefox 3.01 como Internet Explorer 7 tienen un bug que permite la lectura de las cookies marcadas como HttpOnly a través de la consulta de las cabeceras de una petición XHR (XMLHttpRequest). En cualquier caso, creo que es una opción bastante interesante que hay que seguir y empezar a implementar.
Más información:
OWASP: HTTPOnly
Microsoft: Mitigating Cross-site Scripting With HTTP-only Cookies
Bug Mozilla: XMLHttpRequest allows reading HTTPOnly cookies











