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. 【暴力模拟】UVA 1594 - Ducci Sequence

    想麻烦了.这题真的那么水啊..直接暴力模拟,1000次(看了网上的200次就能A)后判断是否全为0,否则就是LOOP: #include <iostream> #include <s ...

  2. Spring分布式事务实现(适用于spring-tx 2.5)

    http://log-cd.iteye.com/blog/807607 分布式事务是指操作多个数据库之间的事务,spring的org.springframework.transaction.jta.J ...

  3. sqlserver 理解文件和文件组

    在sqlserver中,数据库在硬盘的存储方式和普通文件存储一样,仅仅几个文件而已,sqlserver通过管理逻辑上的文件组的方式来管理存储数据的文件, 如图: 文件组管理着磁盘上的文件,而文件中存放 ...

  4. DOM4J方式解析XML文件

    dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory dom4j是一个简单的开源库,用于处理XML. X ...

  5. 使用c#生成Identicon图片

    Identicon是什么 我们在站点注册的时候通常系统会在我们没有提供自定义头像时为我们指定一个默认的头像,不过,样子千篇一律很是难看.聪明的程序员想了很多办法来解决这个问题,比如你能在这里看到很漂亮 ...

  6. 第十三篇、jQuery Mobile

    API-->搜索data 0.page data-transition="slide" // 页面切换效果 data-position="fixed" / ...

  7. iOS App Transport Security

    网络请求提示:Application Transport Security has blocked a cleartext HTTP (http://) resource load since it ...

  8. Eclipse修改java代码后自动重启Tomcat解决办法

    今天甚是郁闷,项目马上要上线了,早上刚到公司打开MyEclipse 10.07提示过期提示,这对于用惯了破解软件的帝国用户的我原本以为小菜一碟. 于是到网上到处找破解软件,不用多长时间,Ok 破解成功 ...

  9. 线程间通信--生产者消费者 升级版JDK5

    import java.util.concurrent.locks.*; /*1.新的解锁,上锁操作,据说是jdk5.0升级版,以前的枷锁,解锁都是隐藏的,默认的,现在变成显式 2.新的异常处理方式  ...

  10. Java多线程概述

    /*多线程1.首先说进程,进程---就是正在进行的程序    每一个进程都有一个执行程序.该顺序是一个执行路径,或者叫一个控制单元 2.线程:就是进程中的一个独立的进程单元        线程在控制着 ...