Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 让Nashorn运行用户代码_Java_Security_Java 8_Webhooks_Nashorn - Fatal编程技术网

Java 让Nashorn运行用户代码

Java 让Nashorn运行用户代码,java,security,java-8,webhooks,nashorn,Java,Security,Java 8,Webhooks,Nashorn,我想知道是否有可能正确地保护Nashorn(或任何其他脚本引擎)以确保运行用户代码的安全。这段代码的目的是让用户在应用程序的某些阶段执行操作,非常类似于web钩子。我知道有一种方法可以阻止某些类从Nashorn内部访问,但是有没有一种方法可以通过反射绕过它?我该如何保护这些功能,还是这样做行不通?您应该将放置在脚本环境中的对象限制为用户需要访问的对象,例如从 在本例中,脚本只能使用NameListKey,其他对象则不可用。避开物体 诸如的应用程序实现Javascript处理环境,允许访问应用程序

我想知道是否有可能正确地保护Nashorn(或任何其他脚本引擎)以确保运行用户代码的安全。这段代码的目的是让用户在应用程序的某些阶段执行操作,非常类似于web钩子。我知道有一种方法可以阻止某些类从Nashorn内部访问,但是有没有一种方法可以通过反射绕过它?我该如何保护这些功能,还是这样做行不通?

您应该将放置在脚本环境中的对象限制为用户需要访问的对象,例如从

在本例中,脚本只能使用NameListKey,其他对象则不可用。避开物体


诸如的应用程序实现Javascript处理环境,允许访问应用程序对象的子集

这会阻止通过反射进行访问吗?例如,此代码不能访问Java.lang包并使用静态方法进行反射
导入(Java.lang.*)
?这是从您的同一个示例网站中获取的。我认为这就是为什么您需要小心您导入的内容。哪些内容会阻止用户向其代码中添加导入?这些内容会出现多次,您可以使用SecurityManager来控制哪些内容可以执行,哪些内容不能执行
jsEngine.put("namesListKey", namesList);
System.out.println("Executing in script environment...");
  try {
    jsEngine.eval("var x;" +
                  "var names = namesListKey.toArray();" +
                  "for(x in names) {" +
                  "  println(names[x]);" +
                  "}" +
                  "namesListKey.add(\"Dana\");");
  } catch (ScriptException ex) {
      ex.printStackTrace();
  }
  System.out.println("Executing in Java environment...");
  for (String name: namesList) {
    System.out.println(name);
  }