目录
输入验证-路径遍历
- pom.xml: 引入commons-io
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency>
- 代码替换
File file =newFile(logpath);FileInputStream logfile =newFileInputStream(file);
替换为importorg.apache.commons.io.FileUtils;File file =FileUtils.getFile(logpath);FileInputStream logfile =FileUtils.openInputStream(file);
API误用-不安全的框架绑定
@InitBinder
只对当前Controller生效,因此可以创建BaseController,其他Controller直接继承该类importorg.springframework.web.bind.WebDataBinder;importorg.springframework.web.bind.annotation.InitBinder;importorg.springframework.web.bind.annotation.RestController;/** * 奇安信 Controller. * @author lw-rxz */@RestControllerpublicclassBaseController{@InitBinderpublicvoidinitBinder(WebDataBinder binder){ binder.setDisallowedFields("test");}}
- 针对
@RequestBody
传参,@InitBinder
是无效的,因此通过@JsonIgnoreProperties(ignoreUnknown = true)
解决
密码管理-配置文件中的明文密码
jasypt
- pom.xml:引入jasypt
<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>2.0.0</version></dependency>
BasicTextEncryptor对应jar包org\jasypt\jasypt\1.9.2\jasypt-1.9.2.jar
- 生成密钥,替换配置文件
importorg.jasypt.util.text.BasicTextEncryptor;/** * 生成密文. * @author lw-rxz */publicclassJasyptUtils{publicstaticvoidmain(String[] args){//PBEWithMD5AndDESBasicTextEncryptor encryptor =newBasicTextEncryptor();//加密 encryptor.setPassword("key");System.out.println(encryptor.encrypt("%8Y!R-PHSA1LJ9_z"));//解密System.out.println(encryptor.decrypt("gZdoGpddkg8dCtdlYmjlAulXUo+Cqr6/LgxcUgfmVOE="));}}
jasypt:
encryptor:
password: key
也可以自定义的密码串标识,默认为:ENC(…)
property:
prefix: "xx@["
suffix: "]"
冲突
jasypt
一开始引入的2.1.1版本,结构导致校验包
javax.validation
失效,换成2.0.0即可
<dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>2.0.1.Final</version></dependency>
依然报明文缺陷
jasypt:
encryptor:
password: key #依然报明文缺陷
替换为环境变量或者作为命令行传入:
官网
--jasypt.encryptor.password=key
-Djasypt.encryptor.password=password
null引用
- 主要为了防止空指针,实际上都没有问题,比如
baseMapper.selectList(null);
但还会提示缺陷,这种可以通过创建常量nullpublicstaticObject NULL =null; baseMapper.selectList((XXX)NULL );//需要转换一下,比如(Test)NULL
- 还有一种就是创建空对象,不要使用null
QueryWrapper queryMapper =null;if(name!=null){ queryMapper =newQueryWrapper<>(); queryMapper.eq("name", name);}baseMapper.selectList(queryMapper)
替换为:QueryWrapper queryMapper =newQueryWrapper<>();if(name!=null){ queryMapper.eq("name", name);}baseMapper.selectList(queryMapper)
总结
除了明文处理,其他几种缺陷感觉非常多此一举,仅仅就是为了不被扫描到缺陷,所以上面很多改动的意义也仅仅是为了通过扫描。
本文转载自: https://blog.csdn.net/qq_36434219/article/details/127659944
版权归原作者 韧小钊 所有, 如有侵权,请联系我们删除。
版权归原作者 韧小钊 所有, 如有侵权,请联系我们删除。