我们在使用Runtime.getRuntime().exec()的时候,可以指定一个命令或者脚本,让它执行,类似于调用系统指令来进行完成一项任务。
但是这个方法如果有安全检查,它会被报出一个Command Injection的风险,也就是命令注入的风险,因为命令可能是外部传入,这个时候,正常的命令都不会有任何问题,但是如果被人恶意指定,比如删除系统服务,删除一些特定目录等的操作,就可能造成非常严重的后果。
所以,一般对于Runtime.exec()这里,需要使用一些安全框架来进行安全检查,一般推荐使用的是 org.owasp.esapi 下的esapi库来进行过滤。
首先引入依赖:
<dependency>
<groupId>org.owasp.esapi</groupId>
<artifactId>esapi</artifactId>
<version>2.5.1.0</version>
</dependency>
除此之外,在java中使用,一定要额外引入三个配置文件,它们分别是:ESAPI.properties,validation.properties,esapi-java-logging.properties 。这三个属性配置文件缺一不可,缺少任何一个都会报错。地址在这里:https://github.com/ESAPI/esapi-java-legacy/tree/develop/configurat