Cookie的secure和httpOnly属性的含义

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/wang252949/article/details/79557963

Cookie访问控制

cookie如此重要,在浏览器端,如果一个网站可以访问其他网站的cookie,肯定不行的,所以浏览器是不允许跨域访问cookie的,提高了Cookie的安全性。

在前面的文章 session和cookie介绍 中,已经介绍了cookie的作用域,主要是说一级域名相同情况下如何共享使用cookie。

如果想实现跨域访问,可以通过JSONP、CORS的方法实现。

另外,HTTP设置cookie时,提供了2个属性,可以增强cookie的安全性,分别是secure属性和httpOnly属性。

secure属性可防止信息在传递的过程中被监听捕获后导致信息泄露,如果设置为true,可以限制只有通过https访问时,才会将浏览器保存的cookie传递到服务端,如果通过http访问,不会传递cookie。

httpOnly属性可以防止程序获取cookie,如果设置为true,通过js等将无法读取到cookie,能有效的防止XSS攻击。

Appscan漏洞 之 加密会话(SSL)Cookie 中缺少 Secure 属性

近期 Appscan扫描出漏洞 加密会话(SSL)Cookie 中缺少 Secure 属性,已做修复,现进行总结如下:

1.1、攻击原理

  任何以明文形式发送到服务器的 cookie、会话令牌或用户凭证之类的信息都可能被窃取,并在稍后用于身份盗窃或用户伪装,此外,若干隐私法规指出,用户凭证之类的敏感信息要始终以加密的方式发送到 Web 站点。

1.2、修复建议

  给cookie添加secure属性

1.3、修复代码示例

  1)服务器配置为HTTPS SSL方式

  2)Servlet 3.0 (Java EE 6)的web.xml 进行如下配置:

  <session-config>
   <cookie-config>
    <secure>true</secure>
   </cookie-config>
  </session-config>

  3)ASP.NET的Web.config中进行如下配置:

   <httpCookies requireSSL="true" />

  4)php.ini中进行如下配置

  session.cookie_secure = True

  或者

  void session_set_cookie_params  ( int $lifetime  [, string $path  [, string $domain  
                                  [, bool $secure= false  [, bool $httponly= false  ]]]] )

  或者

  bool setcookie  ( string $name  [, string $value  [, int $expire= 0  [, string $path  
                 [, string $domain  [, bool $secure= false  [, bool $httponly= false  ]]]]]] )

  5)weblogic中进行如下配置:

  <wls:session-descriptor> 
      <wls:cookie-secure>true</wls:cookie-secure>
       <wls:cookie-http-only>true</wls:cookie-http-only>
   </wls:session-descriptor>

1.4、其它资料

  https://www.owasp.org/index.php/SecureFlag

1.5、实际修复方案

  方案一:项目使用的是WebShpere服务器,这个可以在服务器中进行设置:

  其实这种修复方式和5.2修复建议2)给web.xml加配置的方式是一样的。这两种修复方式都是一定可以通过Appscan扫描的,只不过19环境需要支持https和http两种协议,以上两种方案的话,会导致http协议下的Cookie不能传输,从而导致http协议下的部分功能不能使用。现在暂时是以牺牲http协议下的功能不使用为代价以这种方案通过扫描的。

  方案二:

  如果给Cookie配置了secure属性,那么这个Cookie能在https协议中传输,但是不能在http协议中传输。而实际系统应用中要支持两种协议,这里可以通过request.getScheme()获取是哪种协议(这种方式https协议获取的也是http,奇怪,可以通过下面的方式判断是否是https协议)

  String url = req.getHeader("Referer");

  if(url.startsWith("https")){}

  然后进行判断是否加这个属性:cookie.setSecure(true)。

  而这种方案的话,只能对后期自己代码响应的Cookie做设置,而不能对容器自动响应的Cookie做设置。因此这里没有使用。

会话cookie中缺少secure属性

2014年12月09日 14:34:35 茄子爱烤火 阅读数 15978

What is it and why do I care ?

Session cookies (或者包含JSSESSIONID的cookie)是指用来管理web应用的session会话的cookies.这些cookie中保存特定使用者的session ID标识,而且相同的session ID以及session生命周期内相关的数据也在服务器端保存。在web应用中最常用的session管理方式是通过每次请求的时候将cookies传送到服务器端来进行session识别。

你可以设置附加的secure标识来提示浏览器只能通过Https(加密方式)方式来传输cookie,Http(未加密方式)方式则不可以。这种方式来保证你的session cookie对于攻击者是不可见的,避免中间人攻击(Man-in-the-Middle Attack,简称“MITM攻击”)。这并不是一个完美的session安全管理方案,却是一个重要的步骤。

what should I do about it ?

应对方法很简单。你必须在session cookie添加secure标识(如果有可能的话最好保证请求中的所有cookies都是通过Https方式传输)

如下是示例:未添加secure标识的session cookie-可能会被泄露

Cookie: jsessionid=AS348AF929FK219CKA9FK3B79870H;

添加secure标识:

Cookie: jsessionid=AS348AF929FK219CKA9FK3B79870H; secure;

方式很简洁。你可以甚至可以手工设置这个标识,如果你在Servlet3或者更新的环境中开发,只需要在web.xml简单的配置来实现。你只要在web.xml中添加如下片段:

<session-config>
  <cookie-config>
    <secure>true</secure>
  </cookie-config>
</session-config>

Cookie设置HttpOnly,Secure,Expire属性

2018年07月20日 17:03:04 绝不打铁 阅读数 1587

原文地址: https://blog.csdn.net/a19881029/article/details/27536917

Tomcat版本为6.0.39,JDK版本为1.6update45

在Web工程上增加一个Filter对Cookie进行处理

  1. public class CookieFilter implements Filter {

  2. public void doFilter(ServletRequest request, ServletResponse response,

  3. FilterChain chain) throws IOException, ServletException {

  4. HttpServletRequest req = (HttpServletRequest) request;

  5. HttpServletResponse resp = (HttpServletResponse) response;

  6. Cookie[] cookies = req.getCookies();

  7. if (cookies != null) {

  8. Cookie cookie = cookies[0];

  9. if (cookie != null) {

  10. /*cookie.setMaxAge(3600);

  11. cookie.setSecure(true);

  12. resp.addCookie(cookie);*/

  13. //Servlet 2.5不支持在Cookie上直接设置HttpOnly属性

  14. String value = cookie.getValue();

  15. StringBuilder builder = new StringBuilder();

  16. builder.append("JSESSIONID=" + value + "; ");

  17. builder.append("Secure; ");

  18. builder.append("HttpOnly; ");

  19. Calendar cal = Calendar.getInstance();

  20. cal.add(Calendar.HOUR, 1);

  21. Date date = cal.getTime();

  22. Locale locale = Locale.CHINA;

  23. SimpleDateFormat sdf =

  24. new SimpleDateFormat("dd-MM-yyyy HH:mm:ss",locale);

  25. builder.append("Expires=" + sdf.format(date));

  26. resp.setHeader("Set-Cookie", builder.toString());

  27. }

  28. }

  29. chain.doFilter(req, resp);

  30. }

  31. public void destroy() {

  32. }

  33. public void init(FilterConfig arg0) throws ServletException {

  34. }

  35. }

web.xml:

  1. <filter>

  2. <filter-name>cookieFilter</filter-name>

  3. <filter-class>com.sean.CookieFilter</filter-class>

  4. </filter>

  5. <filter-mapping>

  6. <filter-name>cookieFilter</filter-name>

  7. <url-pattern>/*</url-pattern>

  8. </filter-mapping>

FireFox:

Chrome:

IE:

Cookie的secure和httpOnly属性的含义 以及 Cookie设置HttpOnly,Secure,Expire属性相关推荐

  1. cookie设置httponly属性防护XSS***

    ***者利用XSS漏洞获取cookie或者session劫持,如果这里面包含了大量敏感信息(身份信息,管理员信息)等,***这里用获取的COOKIE登陆账号,并进行非法操作. COOKIE设置http ...

  2. cookie 设置 httpOnly属性

    cookie 设置 httpOnly属性防止js读取cookie. 建立filter拦截器类 CookieHttpOnlyFilter import java.io.IOException; impo ...

  3. Cookie设置HttpOnly属性

    在Servlet 3.0中增加对Cookie(请注意,这里所说的Cookie,仅指和Session互动的Cookie,即人们常说的会话Cookie)较为全面的操作API.最为突出特性:支持直接修改Se ...

  4. Tomcat为Cookie设置HttpOnly属性

    A:Tomcat 中维持Java webapp的Http会话是以Cookie形式实现的存储在服务端用户状态信息的: B:服务端可以自定义建立Cookie对象及属性传递到客户端: 服务端建立的Cooki ...

  5. java设置httponly_Tomcat为Cookie设置HttpOnly属性

    B:服务端可以自定义建立Cookie对象及属性传递到客户端: 服务端建立的Cookie如果没有设置HttpOnly属性,则在客户端可以用js读取Cookie中的内容(客户端脚本可以读取Session ...

  6. 用ISAPI Filter设置HttpOnly属性

    作者:Tony Qu 说到ISAPI很多人会觉得很陌生,因为如果你是做ASP.NET开发的话,ISAPI的方式已经过时,取而代之的是HttpHandler和HttpModule,说到这两个东西很多人估 ...

  7. java httponly设置_cookie 设置 httpOnly属性

    cookie 设置 httpOnly属性防止js读取cookie. 建立filter拦截器类 CookieHttpOnlyFilterimport java.io.IOException; impor ...

  8. Java 设置 httponly cookie

    Httponly cookie 是一种 cookie 安全解决方案. 在支持httponly cookie的浏览器(IE6+.FF3.0+)中,如果cookie中设置了"httponly&q ...

  9. web.config forms节点中的属性的含义和用途

    authentication mode="Forms"/> 这样之后,ASP.NET运行时就知道我们启用了Forms验证,在生命周期的验证阶段就激活FormsAuthenti ...

最新文章

  1. Spring Cloud 中国社区一周年技术沙龙-北京站
  2. 【数字信号处理】周期序列 ( 周期序列定义 | 周期序列示例 )
  3. linux eth0 device not found,nVidia集成驱动已经安装了,但是Device not found,我的网卡怎么用呢?...
  4. 机器学习笔试精选题精选(四)
  5. JZOJ 3870. 【NOIP2014八校联考第4场第1试10.19】单词检索(search)
  6. WEB前端 前端开发者 如何突破技术瓶颈
  7. python 简单trace 过滤处理
  8. SQLite学习笔记(十二)虚拟机指令
  9. 北京电子科技学院(BESTI)实验报告5
  10. 本以为用的MyBatis框架就万无一失了,没想到还是被黑客注入了,我真的无语了!...
  11. BUG Error:Execution failed for task ':app:dexDebug'.
  12. 浅谈《原神》中的图形渲染技术
  13. 使用HBuilderX将H5网页打包成APP
  14. 电子电路设计小目录------面包板制作130例
  15. 基于J2EE的线上打印平台
  16. pygame之display模块
  17. 当路町-网络下载应用系列之三-认识磁力链接Magnet URL
  18. 大学操作系统期末考试复习经典计算题快速回顾
  19. LT3759 宽输入电压范围升压 / 负输出 / SEPIC 控制器 可在输入电压低至 1.6V 的情况下工作...
  20. 平凡之路 | 科班小硕的2020年面试小结

热门文章

  1. 华为云桌面,如何为办公而生
  2. linux 进程 系统调用,linux进程与系统调用
  3. 连体形和连用形的区别?
  4. 用Project软件编制项目计划【总结】
  5. 去除Byte数组的空字符\u0000
  6. java编程基础篇-- 编写一个程序,从键盘输入三个整数,求三个整数中的最小值。
  7. 电脑中必备的一款软件——得力数据恢复软件
  8. 济南职业学院计算机就业好吗,济南职业学院好不好?排名怎么样评价如何
  9. HCIP第三天(HDLC协议与PPP协议)
  10. Solidity学习记录——第二章