Cookie的secure和httpOnly属性的含义 以及 Cookie设置HttpOnly,Secure,Expire属性 |
您所在的位置:网站首页 › 劫持的含义 › Cookie的secure和httpOnly属性的含义 以及 Cookie设置HttpOnly,Secure,Expire属性 |
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 进行如下配置: true3)ASP.NET的Web.config中进行如下配置: 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中进行如下配置: true true1.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中添加如下片段: true
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进行处理 public class CookieFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response; Cookie[] cookies = req.getCookies(); if (cookies != null) { Cookie cookie = cookies[0]; if (cookie != null) { /*cookie.setMaxAge(3600); cookie.setSecure(true); resp.addCookie(cookie);*/ //Servlet 2.5不支持在Cookie上直接设置HttpOnly属性 String value = cookie.getValue(); StringBuilder builder = new StringBuilder(); builder.append("JSESSIONID=" + value + "; "); builder.append("Secure; "); builder.append("HttpOnly; "); Calendar cal = Calendar.getInstance(); cal.add(Calendar.HOUR, 1); Date date = cal.getTime(); Locale locale = Locale.CHINA; SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss",locale); builder.append("Expires=" + sdf.format(date)); resp.setHeader("Set-Cookie", builder.toString()); } } chain.doFilter(req, resp); } public void destroy() { } public void init(FilterConfig arg0) throws ServletException { } } web.xml: cookieFilter com.sean.CookieFilter cookieFilter /* FireFox: Chrome: IE: |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |