kee*_*pan 2 java security runtime.exec
我们使用以下代码使用命令注入概念,
Runtime.getRuntime().exec(cmd);
Run Code Online (Sandbox Code Playgroud)
但系统将此识别为安全威胁,因此有人可以建议任何其他方式或任何第三方API可用于执行此命令注入.任何帮助将非常感激.
我认为你应该使用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不同步.
检查链接 -
| 归档时间: |
|
| 查看次数: |
6061 次 |
| 最近记录: |