漏洞扫描解决方案汇总
简单概要
| 360奇安信扫描 | |||
|---|---|---|---|
| 代码注入:SQL注入:MyBatis | #变量名称创建参数化查询SQL语句,不会导致SQL注入。而$变量名称直接使用SQL指令,会导致SQL注入攻击 | #变量名称,创建参数化查询SQL语句 | 此项目中出现的mybatis注入为框架自封装的数据权限方法,使用$处为将封装好的sql语句填入,并不会存才从外部注入sql的情况 |
| 跨站脚本:存储型XSS(66) | 存储型XSS是指应用程序通过Web请求获取不可信赖的数据,并且在未检验数据是否存在XSS代码的情况下,将其存入数据库。当程序下一次从数据库中获取该数据时,致使页面再次执行XSS代码。存储型XSS可以持续攻击用户,在用户提交了包含XSS代码的数据存储到数据库后,每当用户在浏览网页查询对应数据库中的数据时,那些包含XSS代码的数据就会在服务器解析并加载,当浏览器读到XSS代码后,会当做正常的HTML和JS解析并执行,于是发生存储型XSS攻击 | 对从数据库或其它后端数据存储获取不可信赖的数据进行合理验证(如年龄只能是数字),对特殊字符(如<、>、'、"以及\"
})
public List<SysDept> selectDeptList(SysDept dept);
输入验证:路径遍历new File()修改为org.apache.commons.io.FileUtils.getFile() 代码注入:有风险的SQL查询:MyBatis同代码注入:SQL注入:MyBatis 输入验证:访问权限修饰符控制使用ReflectionUtils.makeAccessible(method);代替/method.setAccessible(true); 密码管理:不安全的随机数使用SecureRandom secureRandom = new SecureRandom();替代Random random = new Random(); 密码管理:硬编码密码从配置文件中获取经过加密的密码值并解密使用
密码管理:配置文件中的明文密码项目中引入jasypt组件
使用jasyot对密码进行加密
在项目启动参数中增加–jasypt.encryptor.password=F!X%pGCD?Z 资源管理:格式化缺陷保证DecimalFormat对象每次都是从ThreadLocal中获取的
代码质量:系统信息泄露:外部不允许返回e.getMessage(),可以修改成如下格式
代码质量:比较Locale相关的数据未指定适当的Locale可以在对字符串处理前,将默认的Locale设置为English。
代码质量:硬编码IP和代码质量:硬编码手机号码和密码管理:硬编码加密密钥1.都配置在配置文件里面
2.有的可能是测试代码,注释掉 代码质量:null引用引用对象之前增加 !=null 判断,有的工具类如CollectionUtils.isNotEmpty()不能使用
资源管理:资源未释放:流要在finally里面使用in.close();关闭,不能使用IOUtils.closeQuietly(in)关闭
密码管理:空的加密密匙不允许出现空密钥,注释掉
|
