0x01:什么是HttpOnly?

如果您在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,窃取cookie内容,这样就增加了cookie的安全性,即便是这样,也不要将重要信息存入cookie。
image.png
使用仅HTTP的Cookie保护数据
为了减轻跨站点脚本攻击的信息泄露风险,Internet Explorer 6 SP1的cookie中引入了新属性。此属性指定无法通过脚本访问cookie。通过使用仅HTTP的cookie,网站消除了cookie中包含的敏感信息可以通过脚本发送到黑客的计算机或网站的可能性。

使用HTTP响应标头在客户端上设置cookie。以下示例显示了此标头中使用的语法。
Set-Cookie: =[; =] [; expires=][; domain=] [; path=][; secure][; HttpOnly]
image.png

注意 该HttpOnly属性不区分大小写。
如果HttpOnly属性包含在响应标头中,则当用户浏览到有效域中的网站时,仍会发送cookie。即使通过首先将cookie设置为Web站点,也无法通过Internet Explorer 6 SP1中的脚本访问cookie。这意味着,即使存在跨站点脚本错误,并且欺骗用户单击利用此错误的链接,Windows Internet Explorer也不会将cookie发送给第三方。该信息是安全的。

注意 仅使用HTTP的cookie是几种技术中的一种,当将它们结合使用时,可以减轻跨站点脚本编写的风险。单独使用它不能完全消除跨站点脚本编写的危险。

浏览器对仅HTTP Cookie的支持
如果网站在不支持仅HTTP cookie的浏览器中设置仅HTTP cookie,则该cookie将被忽略或降级为传统的可编写脚本的cookie。这使得信息容易受到某些浏览器用户的攻击。

对于公司Intranet网页,管理员可能需要使用浏览器,该浏览器可以识别所有用户的仅HTTP cookie。这样可以确保不会因跨站点脚本错误而泄露信息。

对于支持多个浏览器很重要的公共网站,请考虑使用客户端脚本来确定每个访问者的浏览器版本。该网站可以使用浏览器来限制访问者的敏感信息,该浏览器可以缓解Cookie的跨站点脚本攻击。使用不支持仅HTTP cookie的浏览器的访问者将获得有限的信息或功能,并要求升级其软件。

确定Internet Explorer的浏览器版本时,请务必牢记Internet Explorer 6 SP1的用户代理字符串与Internet Explorer 6的用户代理字符串相同。客户端脚本还必须使用以下命令检查次要版本号:导航器)对象的appMinorVersion)属性,以确定是否安装了Internet Explorer 6 SP1。
**

0x02:HttpOnly的设置样例

javaEE

  1. response.setHeader("Set-Cookie", "cookiename=value;
  2. Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly");

具体参数的含义再次不做阐述,设置完毕后通过js脚本是读不到该cookie的,但使用如下方式可以读取
Cookie cookies[]=request.getCookies();

C#**

  1. HttpCookie myCookie = new HttpCookie("myCookie");
  2. myCookie.HttpOnly = true;
  3. Response.AppendCookie(myCookie);


VB.NET**

  1. Dim myCookie As HttpCookie = new HttpCookie("myCookie")
  2. myCookie.HttpOnly = True
  3. Response.AppendCookie(myCookie)

但是在 .NET 1.1 ,中您需要手动添加
Response.Cookies[cookie].Path += “;HTTPOnly”;

PHP4**

  1. header("Set-Cookie: hidden=value; httpOnly");

PHP5

  1. setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);

最后一个参数为HttpOnly属性

0x03:绕过httponly

浏览器未保存帐号密码:需要xss产生登录地址,利用表单劫持
浏览器保存帐号密码:浏览器读取帐号密码
xss跳转(跳转到挂马页面)
xss探针获取用户信息(ip,浏览器版本等)