让Nashorn运行用户代码

时间:2018-02-15 15:25:42

标签: java security java-8 webhooks nashorn

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

1 个答案:

答案 0 :(得分:1)

您应该将脚本环境中放置的对象限制为用户需要访问的对象,例如Oracle: Scripting for the Java Platform

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);
  }

在此示例中,只有namesListKey对脚本是可用的,其他对象不可用。避免使用god个对象。

Thingworx等应用程序实现了一个Javascript处理环境,允许访问应用程序对象的子集。