Runtime.getRuntime()。exec(String [])安全

时间:2011-03-14 16:31:31

标签: java runtime.exec

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

这样安全吗?或者它是否允许将代码注入终端?

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

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

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

找到

答案 3 :(得分:1)

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

答案 4 :(得分:1)

所有这些评论似乎都缺少一个重要的事实。命令注入只是使用exec的用户定义参数的危险之一。另一种可能的攻击是参数注入。您需要知道您允许用户调用的命令的所有可能参数。

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