gpt4 book ai didi

java - apache commons CommandLine 对象是否可以防止命令行注入(inject)?

转载 作者:搜寻专家 更新时间:2023-11-01 02:32:16 26 4
gpt4 key购买 nike

我想使用 org.apache.commons.exec Java 库来调用可执行文件。 CommandLine对象防止命令行注入(inject)?例如,如果我调用:

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);

rm -rf ~/* 除了预期的命令之外还会运行吗?如果是,防止这种情况的最佳方法是什么?

API 表示 addArgument()“处理引用”,但我不确定在这种情况下这意味着什么。我可以创建一个测试用例,看看在我的 Linux 机器上会发生什么,但我想确保它在其他平台上也是安全的。

最佳答案

; 是 shell 的一个特性。如果你不围绕 sh -c 或类似的东西创建一个命令行,你就不能被注入(inject)。这并不是说公共(public)资源是安全的,而是你甚至没有运行具有漏洞的程序。

Commons CLI 正在包装 Process 类。没有记录 Process 类来启动 shell。据记载,使用指定的参数执行 exec

根据评论,开源的奇迹之一是您可以阅读源代码。如果 commons-CLI 的版本 X 做你喜欢的,依赖它,不要在没有重新检查的情况下升级。

关于java - apache commons CommandLine 对象是否可以防止命令行注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6337912/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com