Tim*_*nes 5 java command-line apache-commons apache-commons-exec
我想使用org.apache.commons.execJava 库来调用可执行文件。该CommandLine对象是否可以防止命令行注入?例如,如果我打电话:
String singleStringArgument = "-whatever;rm -rf ~/*"; // evil looking argument!
CommandLine cl = new CommandLine(new File(pathToExe,exeName));
cl.addArgument(singleStringArgument); // oh no!
Executor exe = new DefaultExecutor();
exe.execute(cl);
Run Code Online (Sandbox Code Playgroud)
rm -rf ~/*除了预期的命令之外还会运行吗?如果确实如此,防止这种情况的最佳方法是什么?
API 说addArgument()“处理引用”,但我不确定这在这种情况下意味着什么。我可以编写一个测试用例来看看我的 Linux 机器上会发生什么,但我想确保它在其他平台上也是安全的。
;是外壳的一个功能。如果您不创建命令行sh -c或类似的东西,您就无法被注入。这并不是说公共资源是安全的,而是你甚至没有运行带有漏洞的程序。
Commons CLI 正在包装 Process 类。没有记录 Process 类来启动 shell。据记录,它可以exec使用您告诉它的指定参数执行操作。
根据评论,开源的奇迹之一是您可以阅读源代码。如果 commons-CLI 版本 X 可以满足您的需求,请依赖它,并且在未重新检查的情况下不要升级。
| 归档时间: |
|
| 查看次数: |
1206 次 |
| 最近记录: |