因改漏洞而引申了解的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文件或者内存中删除。

原文地址:https://www.cnblogs.com/meInfo/p/9374026.html

时间: 2024-08-09 14:30:40

因改漏洞而引申了解的Cookie机制!的相关文章

客户端识别和cookie机制

HTTP最初是一个匿名的.无状态的请求,服务器处理来自客户端的请求,然后向客户端回送响应,web服务器几乎没有什么信息来判定是哪个用户发送的请求,也无法记录用户的请求序列,以下有几种方法来增加用户识别机制: 第一.HTTP首部 1.from首部:包含了E-mail地址 2.User-Agent:包含了浏览器相关信息,包括程序的名称和版本, 3.Referer:提供了用户来源页面的URL 第二.客户端的IP地址: 通过TCP链接得到IP地址,存在的问题: 客户端IP地址描述的所用的机器,而不是用户

cookie机制

Cookie通过在客户端记录信息确定用户身份 一个用户的所有请求操作都应该属于同一个会话, HTTP协议是无状态的协议.一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接.这就意味着服务器无法从连接上跟踪会话. cookie机制: 客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie.客户端浏览器会把Cookie保存起来.当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器.服务器检查该Coo

[原创]java WEB学习笔记28: 会话与状态管理Cookie 机制

1.会话与状态管理 1)背景 ① HTTP协议是一种无状态的协议,WEB服务器本身不能识别出哪些请求是同一个浏览器发出的 ,浏览器的每一次请求都是完全孤立的: ② 作为 web 服务器,必须能够采用一种机制来唯一地标识一个用户,同时记录该用户的状态: ③ 问题:怎么才能实现网上商店中的购物车呢:某个用户从网站的登录页面登入后,再进入购物页面购物时,负责处理购物请求的服务器程序必须知道处理上一次请求的程序所得到的用户信息. 2)会话和会话状态 ① WEB应用中的会话:指一个客户端浏览器与WEB服务

cookie机制和session机制的区别

一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案.同时我们也看到,由于才服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择 二.会话cookie和持久cookie的区别 如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了.这种生命期为浏览会

初识JSP之Cookie机制

http协议的无状态性 我们在进行web应用程序开发的时候,使用的是HTTP协议来传输数据,但是这个Http协议有个先天性的不足,也就是无状态,它无法对用户的状态进行保存管理.所谓的无状态就是是指,当浏览器发送请求给服务器的时候,服务器响应客户端请求,但是当同一个浏览器再次发送请求给服务器的时候,服务器并不知道它就是刚才的那个浏览器.简单地说,就是服务器不会去记得你.所以称作无状态协议. 由于HTTP协议是无状态的协议.一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连

cookie机制与session机制的区别

一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案.同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择. 二.会话cookie和持久cookie的区别 如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了.这种生命期为浏

Cookie机制 和 session 机制

先简单介绍下 cookie机制采用的是在客户端保持状态的方案 session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择 客户端保留服务端的sessioID 正统的cookie分发是通过扩展HTTP协议来实现的 服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie 纯粹的客户端脚本如JavaScript也可以生成cookie cookie的内容主要包括:名字,值,过期时间,路径和域. 若不设置过期时间,则表示这个cookie

php session机制与cookie机制以及联系与区别

session与cookie是在做项目中很常用的会话技术,session与cookie也是面试中被问到频率最高的问题,有一次我去面试,面试官就怼着我session与cookie一直问(头都大了),下面总结了一些关于session与cookie的区别与联系. 说到session与cookie,先说一下什么是会话技术: 由于http协议是无状态的协议,也就是说当一个用户在请求一个页面后再请求另一个页面时,http将无法告诉我们这两个请求是否来自于同一个用户,这就意味着我们需要有一种机制来跟踪和记录用

HTTP Session、Cookie机制详解

一.什么是http session,有什么用 HTTP协议本身是无状态的,本身并不能支持服务端保存客户端的状态信息,于是,Web Server中引入了session的概念,用来保存客户端的状态信息. 这 里用一个形象的比喻来解释session的工作方式.假设Web Server是一个商场的存包处,HTTP Request是一个顾客,第一次来到存包处,管理员把顾客的物品存放在某一个柜子里面(这个柜子就相当于Session),然后把一个号码牌交给这个顾 客,作为取包凭证(这个号码牌就是Session