密级:保密
WEB开发安全漏洞修复方案
(V1.0)
文档编号: | 文档名称: | WEB开发安全漏洞修复方案 | |
编 写: | 审 核: | ||
批 准: | 批准日期: | ||
技术研究部
文档修订记录
编号 | 版本号 | 修订内容简述 | 修订日期 | 作者 | 审核 |
1 | V1.0 | 初稿 | 2012-7 | ||
6 | |||||
7 | |||||
8 | |||||
9 | |||||
10 | |||||
11 | |||||
12 | jsessionid | ||||
13 | |||||
14 | |||||
15 | |||||
16 | |||||
1.1背景
随着移动公司对信息安全的进一步加强,要求我们部署的系统必须满足安全扫描要求。
本文档描述了安徽移动对FSDP安全扫描的漏洞的解决方案,并作为WEB开发的安全编程规范。
1.2FSDP安全漏洞清单
见《WEB开发安全漏洞清单.xlsx》
1.3安全漏洞修复方案
1.3.1会话标识未更新
(一)URL
10.149.113.200/loginAction.do
(二)安全问题描述
根据WASC:“会话固定”是一种攻击技术,会强制用户的会话标识变成显式值。固定会话标识值的技术有许多种,会随着目标Web 站点的功能而不同。从利用“跨站点脚本编
制”到向Web 站点密集发出先前生成的HTTP 请求,都在这些技术范围内。用户的会话标识固定之后,攻击者会等待用户登录,然后利用预定义的会话标识值来假定用户的联机身份。
(三)攻击方法
登录过程前后会话标识的比较,显示它们并未更新,这表示有可能伪装用户。初步得知会话标识值后,远程攻击者有可能得以充当已登录的合法用户。
任何时候,只要一名用户与应用程序的交互状态由匿名转变为确认,应用程序就应该发布一个新的会话令牌。这不仅适用于用户成功登录的情况,而且适用于匿名用户首次提交个人或其他敏感信息时。
(四)安全规范要求
COOKIE中的登陆前JSESSIONID与登陆后JESSIONID不能相同。(只有J2EE应用服务器为JESSIONID,其他应用服务器可能不同)
(五)解决方案
将如下代码加入到登陆页面(login.jsp)的最后行:
<%
Session().invalidate();//清空session
Cookie cookie = Cookies()[0];//获取cookie
cookie.setMaxAge(0);//让cookie过期
%>
1.3.2登录错误消息凭证枚举
(一)URL
10.149.113.200/loginAction.do
(二)安全问题描述
当试图利用不正确的凭证来登录时,当用户输入无效的用户名和无效的密码时,应用程序会分别生成不同的错误消息。
通过利用该行为,攻击者可以通过反复试验(蛮力攻击技术)来发现应用程序的有效用户名,再继续尝试发现相关联的密码。这样会得到有效用户名和密码的枚举,攻击者可以用来访问帐户。
(三)攻击方法
修改10.149.113.200/loginAction.do 的HTTP报文头:将参数“optrid”的值设置为“test123WithSomeChars”,除去cookie“JSESSIONID”,除去HTTP 头“Cookie=JSESSIONID”。
(四)安全规范要求
对每个错误的登录尝试发出相同的错误消息,不管是哪个字段发生错误,特别是用户名或密码字段错误。
(五)解决方案
LoginImpl.java类中getLoginInfo方法,涉及到登录错误提示的都改成:
“您输入的用户名或密码不正确!”。
登录超过3次数的改成:
“您尝试登陆失败超过"+Constans.LOGIN_ERROR_TIMES+"次,请30分钟后再登陆!”。
1.3.3不充分帐户封锁
(一)URL
10.149.113.200/loginAction.do
(一)安全问题描述
发送了两次合法的登录尝试,并且在其间发送了几次错误的登录尝试。最后一个响应与第一个响应相同。这表明存在未充分实施帐户封锁的情况,从而使登录页面可能受到蛮力攻
击。(即使第一个响应不是成功的登录页面,也是如此。)
(二)攻击方法
修改10.149.113.200/loginAction.do 的HTTP报文头:除去cookie“JSESSIONID”,除去HTTP 头“Cookie=JSESSIONID”。
(三)安全规范要求
多次登录尝试失败后实施帐户封锁
(四)解决方案
LoginImp.java中的getLoginInfo方法,修订如下代码片段:
//判断登陆失败次数
if(!checkLoginError(logininfo)){
ret.setRetCode("0003");
ret.setRetDesc("您尝试登陆失败超过"+Constans.LOGIN_ERROR_TIMES+"次,请"+Constans.LOGIN_ERROR_LOCK_SECOND+"分钟后再登录!");
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论