java - 让 Nashorn 运行用户代码

标签 java security java-8 webhooks nashorn

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

最佳答案

您应该将放置在脚本环境中的对象限制为用户需要访问的对象,例如 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);
  }

在此示例中,只有名称列表 key 对脚本可用,其他对象则不可用。避免god对象。

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

关于java - 让 Nashorn 运行用户代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48810688/

相关文章:

java - 在流中存储新实例

java - Lambda 表达式如何转换成 Java 字节码

java - 即使在为单个项目发布构建时,eclipse 也会构建所有项目

java - 如何将二维字符串数组打印为字符串

java - Lambda:使用 Runnable 实例启动的可调用变量

ASP.NET MVC 4 和 session 安全漏洞

android - 如何在android中安全地保存 key

java - 计时器滴答一秒后,如何更改 java 中的标签文本?

security - 如何测试 Pyramid 安全设置?

java - executor.invokeAll() 未完成执行