logo资料库

veracode.com漏洞扫描问题修复方案.docx

第1页 / 共24页
第2页 / 共24页
第3页 / 共24页
第4页 / 共24页
第5页 / 共24页
第6页 / 共24页
第7页 / 共24页
第8页 / 共24页
资料共24页,剩余部分请下载后查看
1.引言
1.1 编写目的
1.2 读者对象
1.3 参考资料
2.漏洞描述
2.1 密码漏洞
2.1.1漏洞代码
2.1.2漏洞级别
2.1.3漏洞内容
2.1.4漏洞修复方法
2.1.5漏洞修复代码
2.2 后台登陆权限漏洞
2.2.1漏洞代码
2.2.2漏洞级别
2.2.3漏洞内容
2.2.4漏洞修复方法
2.2.5漏洞修复代码
2.3 用户修改密码漏洞
2.3.1漏洞代码
2.3.2漏洞级别
2.3.3漏洞内容
2.3.4漏洞修复方法
2.3.5漏洞修复代码
2.4用户修改密码漏洞
2.4.1漏洞代码
2.4.2漏洞级别
2.4.3漏洞内容
2.4.4漏洞修复方法
2.4.5漏洞修复代码
2.5 Clickjacking
2.5.1漏洞代码
2.5.2漏洞级别
2.5.3漏洞内容
2.5.4漏洞修复方法
2.5.5漏洞修复代码
2.6 Open URL Redirect
2.6.1漏洞代码
2.6.2漏洞级别
2.6.3漏洞内容
2.6.4漏洞修复方法
2.6.5漏洞修复代码
2.7 Reflected Cross-Site Scripting (XSS)
2.7.1漏洞代码
2.7.2漏洞级别
2.7.3漏洞内容
2.7.4漏洞修复方法
2.7.5漏洞修复代码
2.8 Stored Cross-Site Scripting (XSS)
2.9 Cross-Site Request Forgery (CSRF)
2.9.1漏洞代码
2.9.2漏洞级别
2.9.3漏洞内容
2.9.4漏洞修复方法
2.9.5漏洞修复代码
2.10Excessive Session Timeout Duration
2.10.1漏洞代码
2.10.2漏洞级别
2.10.3漏洞内容
2.10.4漏洞修复方法
2.10.5漏洞修复代码
2.11String Parameter in SSL Request
2.11.1漏洞代码
2.11.2漏洞级别
2.11.3漏洞内容
2.11.4漏洞修复方法
2.11.5漏洞修复代码
2.12Accessible Through Forced Browsing
2.12.1漏洞代码
2.12.2漏洞级别
2.12.3漏洞内容
2.12.4漏洞修复方法
2.12.5漏洞修复代码
2.13Blind SQL Injection
2.13.1漏洞代码
2.13.2漏洞级别
2.13.3漏洞内容
2.13.4漏洞修复方法
2.13.5漏洞修复代码
2.14Formula Injection
2.14.1漏洞代码
2.14.2漏洞级别
2.14.3漏洞内容
2.14.4漏洞修复方法
2.14.5漏洞修复代码
2.15CRLF Injection
2.15.1漏洞代码
2.15.2漏洞级别
2.15.3漏洞内容
2.15.4漏洞修复方法
2.15.5漏洞修复代码
2.16Cross-Site Scripting
2.16.1漏洞代码
2.16.2漏洞级别
2.16.3漏洞内容
跨站脚本攻击
2.16.4漏洞修复方法
2.16.5漏洞修复代码
2.17Directory Traversal
2.17.1漏洞代码
External Control of File Name or Path (CWE ID 73)
2.17.2漏洞级别
High
2.17.3漏洞内容
路径安全隐患
2.17.4漏洞修复方法
2.17.5漏洞修复代码
2.18CRLF Injection
2.18.1漏洞代码
2.18.2漏洞级别
2.18.3漏洞内容
Http 注入
2.18.4漏洞修复方法
2.18.5漏洞修复代码
2.19Cryptographic Issues
2.19.1漏洞代码
Insufficient Entropy (CWE ID 331)
2.19.2漏洞级别
2.19.3漏洞内容
熵不足(伪随机数)漏洞修复方法
2.19.4漏洞修复代码
2.20Cryptographic Issues
2.20.1漏洞代码
Trust Boundary Violation (CWE ID 501)
2.20.2漏洞级别
2.20.3漏洞内容
2.20.4解决方法:
2.20.5漏洞修复代码
漏洞修改文档 益博睿技术部 作者: 版本: 编写时间: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 list = this.getCommonDAO().queryForMapList(sb.toString(), new Object[]{user.getLogin_name()}); if(list!=null&&list.size()>0){ String error_count = list.get(0).get("error_count")==null?"0":list.get(0).get("error_count").toString(). trim(); String error_count_time = list.get(0).get("error_count_time")==null?"":list.get(0).get("error_count_time").to String().trim(); if(!"".equals(error_count)){ count = Integer.parseInt(error_count); count++; sb.delete(0, sb.length()); sb.append(" update t_user set error_count=?,error_count_time=? where login_name=? "); this.getCommonDAO().update(sb.toString(), new Object[]{count,new Date(),user.getLogin_name()}); } } return count; } @Override public boolean allowLogin(User user) throws Exception { StringBuffer sb=new StringBuffer(); sb.append("select error_count_time,error_count from t_user ");
sb.append("where login_name=? "); List list = this.getCommonDAO().queryForMapList(sb.toString(), new 益博睿技术部 Object[]{user.getLogin_name()}); if(list!=null&&list.size()>0){ String error_count = list.get(0).get("error_count")==null?"":list.get(0).get("error_count").toString().t rim(); String error_count_time = list.get(0).get("error_count_time")==null?"":list.get(0).get("error_count_time").to String().trim(); if(!"".equals(error_count)&&!"".equals(error_count_time)){ if("5".equals(error_count)){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar ca = Calendar.getInstance(); ca.setTime(sdf.parse(error_count_time)); ca.add(Calendar.HOUR_OF_DAY, 1); Date now = new Date(); if(now.before(ca.getTime())){ return false; }else{ sb.delete(0, sb.length()); sb.append(" update t_user set error_count=0 where login_name=? "); Object[]{user.getLogin_name()}); this.getCommonDAO().update(sb.toString(), new } } } } return true; }
益博睿技术部 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); }
分享到:
收藏