漏洞修改文档
益博睿技术部
作者:
版本:
编写时间:2017.11
Experian
V2.0
益博睿信息咨询(北京)有限公司
修订历史记录:
变更版本号
0.1
0.2
日期
变更类型
(A*M*D)
A
2016-1-22
2017-11-22 M
益博睿技术部
*A – 增加 M – 修订 D – 删除
修改人
摘
要
备注
Experian 创建
Experian 更新
益博睿技术部
1. 引言
1.1 编写目的
[1] 描述应用系统中出现的安全漏洞。
[2] 描述解决漏洞方法。
[3] 为开发测试人员提供参考。
1.2 读者对象
读者对象包括且不仅限于:
[1] 负责项目研发的相关研发人员
[2] 负责项目测试的相关测试人员
[3] 负责项目质量控制的相关人员
[4] 可能的软件配置管理人员
1.3 参考资料
https://cwe.mitre.org/
益博睿技术部
2. 漏洞描述
2.1 密码漏洞
2.1.1 漏洞代码
CWE ID:307
2.1.2 漏洞级别
High
2.1.3 漏洞内容
密码没有设置输入错误次数限制,这样就给黑客提供了无限试密码的条件。
2.1.4 漏洞修复方法
设置密码输入 5 次错误,自动锁定账号 1 小时。
2.1.5 漏洞修复代码
t_user 表增加两个字段 error_count(错误次数),error_count_time(最后一次输入错误时间)
alter table t_user add error_count int;
alter table t_user add error_count_time datetime;
//查询是否可以登陆(是否因为密码输入错误次数过多而锁住)
boolean allow = this.getLoginService().allowLogin(user);
if (!allow) {
request.setAttribute("error", "密码输入错误次数过多,请稍后再试。");
logger.error("密码输入错误次数过多,请稍后再试。!");
return "login";
}
if (!user.equalsPWD(loginPWD)) {
//
//记录登陆错误次数
int num = this.getLoginService().count(user);
request.setAttribute("error", "密码错误!请重新输入!");
request.setAttribute("error", "登陆名或密码错误!输入5次错误密码将被锁住,您
已输入错误"+num+"次。");
logger.error("密码错误!请重新输入!");
return "login";
}
接口:
/**
* 记录输入错误次数
益博睿技术部
* @param user
* @return
*/
public int count(User user);
/**
* 查询是否可以登陆
* @param user
* @return
*/
public boolean allowLogin(User user) throws Exception ;
实现:
@Override
public int count(User user) {
int count = 0;
StringBuffer sb=new StringBuffer();
sb.append("select error_count_time,error_count from t_user ");
sb.append("where login_name=? ");
List
sb.append("where login_name=? ");
List
益博睿技术部
2.2 后台登陆权限漏洞
2.2.1 漏洞代码
CWE ID:269
2.2.2 漏洞级别
High
2.2.3 漏洞内容
前台用客户账号登陆,在地址栏直接输入后台 URL,客户的账号就登录到了后台系统。
2.2.4 漏洞修复方法
后台登陆加上权限校验,只有管理员才能登陆。
2.2.5 漏洞修复代码
//如果是后台登陆,查询session里的用户是否有权限
if(request.getRequestURI().endsWith("signBack.do")){
if (Constant.PLATFORM_FRONT.equals(user.getPlatform())) {
//强制登录
return mapping.findForward("login");
}
}
益博睿技术部
2.3 用户修改密码漏洞
2.3.1 漏洞代码
CWE ID:269
2.3.2 漏洞级别
High
2.3.3 漏洞内容
客户在修改密码提交后,没有校验 session 中的登录用户是否和修改密码的用户是同一
个人。
2.3.4 漏洞修复方法
后台先校验一下修改密码的账号是否是当前登录人。
2.3.5 漏洞修复代码
if (!id.equals(user.getPk_id())) {
this.info("用户名错误,请重新输入");
request.setAttribute("message", "用户名错误,请重新输入");
return toLoginInfo(request);
}