我正在解决一个问题,我必须从Java代码中执行tar命令
tar -xcv output_file_name source_directory
代码
String cmd = "tar -cvzf /tmp/logs.tar.Z /home/test/log/status.*"
try {
Process p1 = Runtime.getRuntime().exec(cmd);
p1.waitFor();
} catch (IOException e) {
e.printStackTrace();
}
上面的代码是工作的,但它是失败的第三方安全测试与命令注入的可能性。
我已经尝试通过添加regex来消毒我的输入命令,但漏洞仍然相同。
有谁能帮忙处理这个场景吗?在这方面的任何帮助都是非常感谢的。
首先,我认为这根本行不通。exec(cmd)
调用将不能正确处理/home/test/log/status.*
命令行参数…假设您希望status.*
匹配所有以"status."开头的文件。在那个目录里。exec
方法不理解shell语法,如globbing。
接下来,-v
选项将tar文件中包含的文件名输出到标准输出。但是您不是在消费标准输出。你应该删除
选项我猜是安全工具在抱怨你没有使用tar
的绝对路径。有可能$PATH
将包括(比如说)"…然后在当前目录下执行一个伪tar
命令。
所以命令应该是这样的:
Process p1 = Runtime.getRuntime().exec(
"/bin/sh", "-c",
"/bin/tar -czf /tmp/logs.tar.Z /home/test/log/status.*");
如果这不能解决问题,请告诉我们您使用的是哪种安全工具,并向我们展示完整的消息,包括任何错误编号。如果我们有更多的细节,我们也许能弄清楚它在抱怨什么。