安全测试 关于会话标识未更新的解决方法

最近本人搭了一个框架,用IBM Rational AppScan扫描出其中的一个安全漏洞,描述如下:[1 / 2] 会话标识未更新
严重性: 高
测试类型: 应用程序
有漏洞的URL: ***
修复任务: 不要接受外部创建的会话标识.
[b]会话标识未更新[/b]
应用程序
WASC 威胁分类
授权类型:会话定置
http://www.webappsec.org/projects/threat/classes/session_fixation.shtml
CVE 引用
不适用
安全风险
可能会窃取或操纵客户会话和cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户
身份查看或变更用户记录以及执行事务
可能原因
Web 应用程序编程或配置不安全
技术描述
根据WASC:
“会话固定”是一种攻击技术,会强制用户的会话标识变成显式值。
固定会话标识值的技术有许多种,会随着目标Web 站点的功能而不同。从利用“跨站点脚本编
制”到向Web 站点密集发出先前生成的HTTP 请求,都在这些技术范围内。用户的会话标识固
定之后,攻击者会等待用户登录,然后利用预定义的会话标识值来假定用户的联机身份。一般
而言,对于标识值的会话管理系统有两种类型。第一种类型是“宽容”系统,可让Web 浏览器指
定任何标识。第二种类型是“严格”系统,只接受服务器端生成的值。当使用宽容系统时,不需
要联系Web 站点,便可以维护任何会话标识。在严格系统中,攻击者需要维护“陷阱会话”并且
必须定期联系Web 站点,才能防止闲置超时。
对于会话固定,倘若没有活动保护,使用会话来识别已认证的用户的任何Web 站点都可能受
到攻击。使用会话标识的Web 站点通常都是基于cookie 的站点,但也会使用URL 和隐藏的表
单字段。不幸的是,基于cookie 的会话最容易受到攻击。
目前已识别的大多数攻击方法都是针对cookie 的固定。
相对于在用户登录Web 站点之后,再窃取用户的会话标识,会话固定提供的机会多得多。
在用户登录之前,攻击的活动部分便已启动。
会话固定攻击过程通常由三个步骤组成:
1) 安装会话
攻击者针对目标Web 站点设下“陷阱会话”,并获取这个会话的标识,攻击者也可以选择攻击中
所用的任意会话标识。在某些情况下,必须反复联系Web 站点,才能维护确定好的陷阱会话
值。
2) 固定会话
攻击者将陷阱会话值引进用户的浏览器中,固定用户的会话标识。
3) 进入会话
用户登录目标Web 站点之后,当使用固定会话标识值时,攻击者便可加以接管。”
----------------------------------------------
如果会话管理系统接受URL 参数形式的会话标识,下列请求便可以强迫会话标识采用URL 参
数值。
代码片段:
http://example/login.php?PHPSESSID=1234
根据WASC:
2012/10/27 16:48:30 16/41
“利用客户端脚本发出新的会话标识cookie 值
-------------------------------------------------------------------------------------------
域中任何Web 站点的“跨站点脚本编制”漏洞都可用来修改当前cookie 值。代码片段:
http://example/
另一个类似的示例(使用META 标记注入):
http://example/20domain=.example.dom">
利用HTTP 响应头发出cookie
-----------------------------------------------------------------------
攻击者强迫目标Web 站点或域中的任何其他站点发出会话标识cookie。许多方法都可以做到
这一点:
- 闯进域中的某Web 服务器(例如:维护不良的WAP 服务器)- 毒害某用户的DNS 服务器,
实质将攻击者的Web 服务器添加到域中 - 在域内安装恶意的Web 服务器(例如:在Windows
2000 域的工作站上,所有工作站也都在该DNS 域中)
- 利用HTTP 响应分割攻击”----------------------------------------------
登录过程前后会话标识的比较,显示它们并未更新,这表示有可能伪装用户。初步得知会话标
识值后,远程攻击者有可能得以充当已登录的合法用户。
利用“跨站点脚本编制”漏洞可以获取会话标识值,导致受害者的浏览器在联系易受攻击的站点
时使用预定的会话标识;启用“固定会话”也可以获取会话标识值,导致站点在受害者的浏览器
中显示预定的会话标识。
一般修订建议
始终生成新的会话,供用户成功认证时登录。
防止用户操纵会话标识。
请勿接受用户浏览器登录时所提供的会话标识

经过网上查找一番,给出解决办法:
登陆界面和登陆成功的界面一致时, 修改后台逻辑,在验证登陆逻辑的时候,先强制让当前session过期,然后用新的session存储信息;
登陆界面和登陆成功的界面不一致时 在登陆界面后增加下面一段代码,强制让系统session过期。
request.getSession().invalidate();//清空session
Cookie cookie = request.getCookies()[0];//获取cookie
cookie.setMaxAge(0);//让cookie过期 ;
[color=red]注意[/color]:这段代码需要在页面的最后部分加上才可以,否则将报错。

你可能感兴趣的:(Java编程)