我们使用以下代码
来使用命令注入概念Runtime.getRuntime().exec(cmd);
但系统将此识别为安全威胁,因此有人可以建议任何其他方式或任何第三方API可用于执行此命令注入。任何帮助都会非常感激。
答案 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不同步。
检查链接 -
答案 1 :(得分:0)
您可以使用ProcessBuilder。
有关减少威胁的详细信息,请参阅提供的指南here。