3

我正在使用 Runtime.getRuntime().exec(String[]) 来运行其中一些字符串数组元素由用户定义的进程。

这安全吗?还是允许将代码注入终端?

如果不安全,我该怎么做才能避免代码注入?(它必须是平台独立的)

4

5 回答 5

3

正如我在对另一个答案的评论中提到的(不妨添加我自己的答案),只要您控制第一个参数,这应该是安全的。

于 2011-03-14T17:06:09.327 回答
2

通常这是不安全的,因为应该可以执行 shell 脚本(可能是恶意的)。

我将允许您知道一组预定义的命令,并让用户选择其中一个(带有可能以某种方式转义的可选参数),而不是允许完全输入命令。

于 2011-03-14T16:37:30.607 回答
2

假设您的用户提供参数,ProcessStarter 是您的朋友。关于如何使用它的小教程可以在 https://www.java-tips.org/java-se-tips-100019/88888889-java-util/426-from-runtimeexec-to-processbuilder.html找到

于 2011-03-14T16:48:32.347 回答
1

我认为这种情况下的安全性是由底层操作系统访问控制定义的。如果您使用 unix 并以受限用户身份运行脚本,那么您应该没问题。因此,只要正确定义了访问控制并且脚本以具有正确权限的用户身份运行,就可以了。(但是是什么用例让你编写了这样的程序。)

于 2011-03-14T16:44:15.283 回答
1

所有这些评论似乎都遗漏了一个重要事实。命令注入只是将用户定义的参数与 exec 一起使用的危险之一。另一种可能的攻击是参数注入。您需要了解您让用户调用的命令的所有可能参数。

一个危险命令的例子是 find。用户可以添加选项 -exec 作为参数来获得任意命令执行。

于 2014-01-27T16:20:48.523 回答