我正在使用 Runtime.exec() 来运行可执行文件。我一直在研究并发现在应用程序中使用它时可能存在安全问题。使用 Runtime.exec() 运行可执行文件时是否存在安全问题?
@Jeanne Boyarsky:显然你不能按照你提到的方式注入 Runtime.exec() ,除非 Runtime.exec() 首先生成一个 shell(Windows 上的 cmd.exe 或 Linux 上的 sh/bash/csh/ksh )来运行命令。Here是一个很好的链接,讨论了这个问题。
我写了一个小程序来测试这一点。它接受命令作为用户输入。所以如果我输入 'pwd'(Linux 系统)它将把当前目录打印到系统控制台。这非常有效。
但是,如果我尝试运行两个命令(Linux 中允许的),例如pwd;id它立即抛出异常。抛出的异常如下。
javax.faces.el.EvaluationException:java.io.IOException:无法运行程序“pwd;ls”:错误= 2,没有这样的文件或目录
话虽如此,但在某些情况下这可能会成为问题。如果我有一段代码如下:
进程 proc = runtime.exec(cmd);
...用户可以提供以下输入sh -c 密码;id,从而导致 shell 运行,然后在其中链接命令。
简而言之,如果可以的话,最好不要使用 Runtime.exec() 。如果您必须使用它,请确保规范化所有用户输入并仅允许特定字符和命令。
Here是一本关于如何编写安全代码的好读物。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)