zoukankan      html  css  js  c++  java
  • 因改漏洞而引申了解的Cookie机制!

      近期因为修改漏洞:Appscan扫描漏洞:加密会话(SSLCookie中缺少Secure属性,而涉及到Cookie有关的知识,现结合该漏洞的修复过程和了解的cookie知识总结一下。

    一、加密会话(SSL)Cookie中缺少Secure属性漏洞概述:

      任何以明文形式发送到服务器的 cookie、会话令牌或用户凭证之类的信息都可能被窃取,并在稍后用于身份盗窃或用户伪装,此外,若干隐私法规指出,用户凭证之类的敏感信息要始终以加密的方式发送到 Web 站点。(也可以认为,当把传输协议改为Https的时候,需要设置传输的Cookie是secure属性,不然Appscan认为是不安全的,则会报该漏洞)。

     

    图一:Appscan漏洞扫描报告(可以看到是哪个文件引起哪个漏洞)

    二、修复方式:

      1、 在web.xml文件中配置:

     

    图二:Appscan参考库推荐修复方案

     

      2、如果是WebShpere服务器的话,还可以在服务器中进行设置:

     

    图三:WebShpere服务器设置修复方式

     

      注1:以上两种方式,都是给容器添加了配置,使得容器响应给前台的Cookie都添加上secure属性。同时,给Cookie添加了这个secure属性之后,如果是http协议的话,则该Cookie不能进行传输的,所以会影响在http协议下的正常的功能。(在保理云系统中,则会导致滑动验证后台校验的时候Session拿不到值从而登录时滑动验证一直不能通过)

      注2:Appscan还有另外一个关于Cookie的漏洞:Cookie中缺少HttpOnly属性!当给Cookie中设置了HttpOnly属性,则js不能获取到Cookie信息,即在F12控制台下也不能使用document.cookie获取Cookie信息。

    问:为什么在第一次访问保理云后台的时候,在RandomWidthServlet请求的时候响应了Set-Cookie呢?

      答:因为在RandomWidthServlet请求的时候,后台服务器第一次获取了Session设置滑动距离保存在后台Session,相当于这个时候第一次生成了Session,而根据会话跟踪技术的规定,这个时候就会响应一个Cookie给到前台,用以浏览器后面再发送请求的时候跟踪到该Session从而确定是哪个浏览器。(服务器会向浏览器发送一个名为JSESSION的Cookie,它的值为该Session的id,也就是HttpSession.getId()的返回值,Session依据该Cookie来识别是否是同一用户。)

     

    图四:RandomWidthServlet请求部分代码

      关于Set-CookieCookie

      有两个Http头部和Cookie有关,即Set-Cookie和Cookie,如下图六。

      Set-Cookie:由服务器发送,它包含在响应请求的头部中,它用于在客户端创建一个Cookie。即服务器响应了该Cookie给浏览器之后,浏览器会自动去解析保存该响应头的Cookie,在后面浏览器再发送请求服务器的时候,请求头部分就会携带上该Cookie到后台供进行会话跟踪。

      Cookie:由客户端发送,包含在Http请求头中。注意:只有Cookie的domain属性和path与请求的url匹配才会发送这个Cookie。

     

    图五:第一次访问网站的请求响应包

     

    图六:非第一次访问网址的请求响应包

     

     问:如果有一些情况不能使用Cookie,例如浏览器不支持(大部分手机中的浏览器)或者禁用了Cookie,那该如何实现会话跟踪呢?

      答:Java Web提供了另外一种解决方案:URL地址重写。例如在所有请求地址上加个Sid参数,值为Session的id,根据这些请求的sid参数,就可以匹配到后台对应的Session,因此就可以跟踪对应的用户了。

      

    Cookie的有效期问题!

      Cookie的maxAge决定着Cookie的有效期,单位为秒。Cookie中通过getMaxAge()方法与setMaxAge(int maxAge)方法来读写maxAge属性。

      如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中。无论客户关闭了浏览器还是电脑,只要还在maxAge秒之前,登录网站时该Cookie仍然有效。例如,登录过的网站能自动填充帐号密码,以及自动登录功能都是通过Cookie机制实现的。

      cookie.setMaxAge(Integer.MAX_VALUE); //这样设置的话,该cookie将永久有效

      如果maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。maxAge为负数的Cookie,为临时Cookie,不会被持久化,不会被写到Cookie文件中。Cookie信息保存在浏览器内存中,因此关闭浏览器该Cookie就消失了。Cookie默认的maxAge值为-1.

      如果maxAge为0,则表示删除该Cookie。Cookie机制没有提供删除Cookie的方法,因此通过设置该Cookie即时失效实现删除Cookie的效果。失效的Cookie会被浏览器从Cookie文件或者内存中删除。

  • 相关阅读:
    我的浏览器收藏夹分类
    我的浏览器收藏夹分类
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 315 计算右侧小于当前元素的个数
    Java实现 LeetCode 315 计算右侧小于当前元素的个数
  • 原文地址:https://www.cnblogs.com/meInfo/p/9374026.html
Copyright © 2011-2022 走看看