1、简介

  如果cookie设置了HttpOnly标志,可以在发生XSS时避免JavaScript读取cookie,这也是HttpOnly被引入的 原因。但这种方式能防住攻击者吗?HttpOnly标志可以防止cookie被“读取”,那么能不能防止被“写”呢?答案是否定的,那么这里面就有文章可 做了,因为已证明有些浏览器的HttpOnly标记可以被JavaScript写入覆盖,而这种覆盖可能被攻击者利用发动session fixation攻击。本文主题就是讨论这种技术。

  2、用JavaScript覆盖cookie中的HttpOnly标志

  当JavaScript可以覆盖cookie中的HttpOnly标志时,攻击者如果发现网站的XSS漏洞,就可以利用HttpOnly cookie发动session fixation攻击(更多关于session fixation攻击的内容可以参考笔者之前的文章[1])。

  session fixation攻击的后果是攻击者可以冒充受害者,因为其知道受害者的session ID。这里假设当成功登录应用后session不会重新生成。现实也确实是这样的,但浏览器不应该允许JavaScript覆盖HttpOnly标志,因 为这种覆盖可能与某些应用程序登录成功后不会重新生成会话这一特性结合,发动session fixation攻击。

  那么登录成功后如果重新生成session ID的话安全性是怎么样的呢?还能被攻击者利用吗?登录之后,攻击者通过设置用户的session为攻击者正在使用的session,将用户切换为攻击者 自己的帐户。受害者以为其正在使用自己的帐户,实际上一些敏感信息已经泄露给攻击者了。

  3、允许JavaScript覆盖HttpOnly cookie的浏览器

  经笔者证实,以下浏览器允许JavaScript覆盖HttpOnly cookies:

  Safari

  Opera Mobile

  Opera Mini

  BlackBerry browser

  Konqueror browser

  该问题已经(于2014年2月14日)提交给相应的厂商。

  IE、Firefix和Opera(标准安装版本)不容易受到上述攻击影响。

  4、厂商的回复

  Opera公司已经确认该问题在Opera Mobile和Opera Mini中存在,决定在Opera Mini中修复该问题(修复日期还未确定)。尽管Opera Mobile当前在GooglePlay中可以下载,但Opera公司认为该版本已经过时,因此决定不对其进行修改(他们建议替换为Opera forAndroid版本,该版本可以防止JavaScript覆盖HttpOnly cookie)。

  黑莓公司回复说已经宣布于2014年4月后不再对PlayBook Tablet的操作系统(笔者当时测试时使用的系统)进行支持,因此不会修复该问题。但是由于该问题是在支持结束声明之前提交的,他们决定将我加入到黑莓安全事件响应小组的感谢名单中(根据他们的规定,笔者的名字会在2014年4月底才会被加入)[2]。

  Konqueror确认了该问题,但可能不会去修复。该bug的信息可以在KDE Bugtracking系统中找到[3]。

  该问题两个月前提交给了苹果公司,但从未收到任何反馈。

  5、漏洞利用

  以下是部分示例代码:

  setcookie('cookie1',++$_COOKIE['cookie1'],time()+2592000,'/','',0,1);

  setcookie('cookie2',++$_COOKIE['cookie2'],time()+2592000,'/','',0,0);

  ?>  setcookie('cookie1',++$_COOKIE['cookie1'],time()+2592000,'/','',0,1);

  setcookie('cookie2',++$_COOKIE['cookie2'],time()+2592000,'/','',0,0);

  >  setcookie('cookie1',++$_COOKIE['cookie1'],time()+2592000,'/','',0,1);

  setcookie('cookie2',++$_COOKIE['cookie2'],time()+2592000,'/','',0,0);

  > 

  print "Cookie1:".$_COOKIE['cookie1']."<  print "Cookie1:".$_COOKIE['cookie1']."<  print "Cookie1:".$_COOKIE['cookie1']."
";

  print "Cookie2:".$_COOKIE['cookie2'];

  >

  过程如下:运行这段代码,之后可以看到cookie1(设置了HttpOnly标志)已经被JavaScript写入覆盖了。

  6、总结

  HttpOnly标志的引入是为了防止设置了该标志的cookie被JavaScript读取,但事实证明设置了这种cookie在某些浏览器
中却能被JavaScript覆盖,可被攻击者利用来发动session
fixation攻击。该问题被提出后,得到了相关厂商的响应。最后,本文给出了一段利用演示代码。

浏览器因cookie设置HttpOnly标志引起的安全问题的更多相关文章

  1. Cookie设置HttpOnly,Secure,Expire属性

    在eclipese中创建Web工程时,有个dynamic web module version选项,首先解释下这个选项的意思: http://stackoverflow.com/questions/3 ...

  2. Servlet 2.5为cookie配置HTTPOnly属性

    cookie的HTTPOnly属性,主要是用来防止JavaScript来读取cookie,默认情况下,JavaScript可以通过document.cookie来读取cookie,这样是很不安全的.通 ...

  3. PHP设置COOKIE的HttpOnly属性

    httponly是微软对cookie做的扩展.这个主要是解决用户的cookie可能被盗用的问题. 大家都知道,当我们去邮箱或者论坛登陆后,服务器会写一些cookie到我们的浏览器,当下次再访问其他页面 ...

  4. php设置cookie为httponly防止xss攻击

    什么是XSS攻击? XSS攻击(Cross Site Scripting)中文名为跨站脚本攻击,XSS攻击时web中一种常见的漏洞.通过XSS漏洞可以伪造目标用户登录,从而获取登录后的账号操作. 网站 ...

  5. Python3+Selenium2完整的自动化测试实现之旅(四):Selenium-webdriver操作浏览器、Cookie、鼠标键盘、警示框、设置等待时间、多窗口切换

    本篇学习总结webdriver模块操作浏览器.Cookie.鼠标键盘.警示框.设置等待时间.多窗口切换等方法的使用 1    浏览器控制 Selenium-webdriverAPI提供了对页面元素定位 ...

  6. express 设置 cookie 以及 httpOnly

    权限控制基本 cookie 在 express 中引入 cookie-parser const express = require('express') const cookieParser = re ...

  7. Session Cookie的HttpOnly和secure属性

    Session Cookie的HttpOnly和secure属性 一.属性说明: 1 secure属性 当设置为true时,表示创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTT ...

  8. Cookie的HttpOnly、secure、domain属性

    Cookie主要属性 Cookie主要属性: path domain max-age expires:是expires的补充,现阶段有兼容性问题:IE低版本不支持,所以一般不单独使用 secure h ...

  9. JAVA设置HttpOnly Cookies

    HttpOnly Cookies是一个cookie安全行的解决方案. 在支持HttpOnly cookies的浏览器中(IE6+,FF3.0+),如果在Cookie中设置了"HttpOnly ...

随机推荐

  1. VIM 选择多行,复制粘贴

    进入VIM,比如编辑一个文件, 1.进行选择,是V模式,按V键,进入该模式,然后选择要复制的行 2. 选择好之后,再按y键,即使复制到了 3.然后光标进入要复制的行之后,按一下P键,就粘贴了,oh y ...

  2. app测试点

    手机上的app分为基于HTML5的app(类似于pc上的b/S应用)和本地app(类似于C/S结构). 所以测试上我们也可以充分吸收web的b/s和c/s测试经验.但是不同于pc上的应用测试,手机上的 ...

  3. cl: cannot open file 'kernel32.lib'

    在测试 jni时, 使用 cl命令, 如 cl -I xx\jdk1.7.0_17\include -I xx\jdk1.7.0_17\include\win32 -LD HelloNative.c ...

  4. powerdesign设置实体显示格式

    工具-显示参数选择中,如下图:

  5. dorado需要的包

    创建dorado示例中心项目WEB-INF下的lib里的包有很多,包括连接数据库的完整的包,新建的项目,可以直接从这里面拷贝包. 当然如果需要连接mySql数据库,还需要手动导入mySql的包.

  6. 用python下载辞典

    用python下载词源词典Etymoline Online Etymology Dictionary是最好的 English 词源词典,现在来说没有之一.但是,一直在PC上查单词有时不是很方便,遂就想 ...

  7. C++ 中的“ !” 运算

    在介绍“ !”运算之前,我们要知道一个变量n,如果n>0,那么我们可以在逻辑上叫它“真”,如果n<=0 ,那么我们可以在逻辑上叫它“假”. n为真时,!n就为假(false),转换为整型值 ...

  8. dd命令测试linux磁盘读写速度

    1.先熟悉两个特殊的设备:    (1)/dev/null:回收站.无底洞.    (2)/dev/zero:产生字符. 2.测试磁盘写能力    time dd if=/dev/zero of=/t ...

  9. 在Mac OS X中搭建STM32开发环境(1)

    本文原创于http://www.cnblogs.com/humaoxiao,非法转载者请自重! 本文方法必须好用!绝不坑爹!看了N多英文资料才搞明白的,适用于STM32F4DISCOVERY评估板,带 ...

  10. debian 学习记录-3 -关于linux -1

    来源:<Debian标准教程>王旭 著 芬兰人Linus Trovalds 1991年1月2日····   2006年初发布内核2.6.15 使用Andrew Tanenbaum < ...