操作系统命令注入安全威胁

时间:2014-10-15 09:34:28

标签: java security runtime.exec

我们使用以下代码

来使用命令注入概念
Runtime.getRuntime().exec(cmd);

但系统将此识别为安全威胁,因此有人可以建议任何其他方式或任何第三方API可用于执行此命令注入。任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:6)

我认为你应该使用ProcessBuilder,这个类用于创建操作系统进程,因为开发人员应该避免使用Runtime.exec调用shell来调用特定于操作系统的命令,而应该使用Java API。

每个ProcessBuilder实例都管理一组流程属性。 start()方法使用这些属性创建一个新的Process实例。可以从同一实例重复调用start()方法,以创建具有相同或相关属性的新子进程。

启动使用默认工作目录和环境的新流程很简单:

 Process p = new ProcessBuilder("myCommand", "myArg").start();

以下示例使用修改后的工作目录和环境启动进程,并将标准输出和错误重定向到日志文件中:

 ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
 Map<String, String> env = pb.environment();
 env.put("VAR1", "myValue");
 env.remove("OTHERVAR");
 env.put("VAR2", env.get("VAR1") + "suffix");
 pb.directory(new File("myDir"));
 File log = new File("log");
 pb.redirectErrorStream(true);
 pb.redirectOutput(Redirect.appendTo(log));
 Process p = pb.start();
 assert pb.redirectInput() == Redirect.PIPE;
 assert pb.redirectOutput().file() == log;
 assert p.getInputStream().read() == -1;

请记住,从Java 5开始支持它,并且Class不同步。

检查链接 -

Source Doc

Code Samples

答案 1 :(得分:0)

您可以使用ProcessBuilder

有关减少威胁的详细信息,请参阅提供的指南here