密级:保密
WEB开发安全漏洞修复方案
(V1.0)
文档编号: | 文档名称: | WEB开发安全漏洞修复方案 | |
编 写: | 审 核: | ||
批 准: | 批准日期: | ||
技术研究部
文档修订记录
编号 | 版本号 | 修订内容简述 | 修订日期 | 作者 | 审核 |
1 | V1.0 | 初稿 | 2012-7 | ||
6 | |||||
7 | |||||
8 | |||||
9 | |||||
10 | |||||
11 | |||||
12 | |||||
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+"分钟后再登录!");
return ret;
}
//增加验证登陆错误次数代码
addLoginErrorRec(logininfo);
1.3.4跨站点脚本编制
(一)URL
10.149.113.200/callAction.do
10.149.113.200/loginAction.do
(二)安全问题描述
可能会窃取或操纵客户会话和cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务。
(三)攻击方法
Web 站点中所包含的脚本直接将用户在HTML 页面中的输入(通常
是参数值)返回,而不预先加以清理。如果脚本在响应页面中返回由JavaScript 代码组成的输入,浏览器便可以执行此输入。因此,有可能形成指向站点的若干链接,且其中一个参数包含恶意的JavaScript 代码。该代码将在站点上下文中(由用户浏览器)执行,这使得该代码有权访问用户在该站点中具有访问权的cookie,以及站点中其他可通过用户浏览器访问的窗口。
攻击依照下列方式继续进行:攻击者诱惑合法用户单击攻击者生成的链接。用户单击该链接
时,便会生成对于Web 站点的请求,其中的参数值含有恶意的JavaScript 代码。如果Web 站点将这个参数值嵌入在响应的HTML 页面中(这正是站点问题的本质所在),恶意代码便会在用户浏览器中运行。
(四)安全规范要求
FSDP框架中在传递参数时有两个主要参数classes与common,一个指定要调用的service,一个是调用service中的方法,如果service或方法不存在,就会跳转到错误信息显示,并将详细的错误信息显示出来,如:callAction.do?method=call&nextPage=/oa/task/task_querylayout.jsp&classes=taskClientImpl&common=getInfoQueryDate这个URL,如果我们将URL修改一下,变成如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论