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

kee*_*pan 2 java security runtime.exec

我们使用以下代码使用命令注入概念,

Runtime.getRuntime().exec(cmd);
Run Code Online (Sandbox Code Playgroud)

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

Per*_*t8S 6

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

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

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

 Process p = new ProcessBuilder("myCommand", "myArg").start();
Run Code Online (Sandbox Code Playgroud)

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

 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;
Run Code Online (Sandbox Code Playgroud)

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

检查链接 -

来源文件

代码示例