0


奇安信-源代码安全缺陷问题解决记录:路径遍历、API误用、配置文件明文

目录

输入验证-路径遍历

  • 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
  • 还有一种就是创建空对象,不要使用nullQueryWrapper 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
版权归原作者 韧小钊 所有, 如有侵权,请联系我们删除。

“奇安信-源代码安全缺陷问题解决记录:路径遍历、API误用、配置文件明文”的评论:

还没有评论