禁止脚本使用Java安全管理器访问特定的Java类



我已经在使用Java 8,它是Nashornjavascript引擎。在我的应用程序中,我从Java classess访问javaScript脚本文件,用于各种目的。然而,也可以从javaScript代码访问Java类。但是,由于我的应用程序中的JavaScripts也可以由第三方编写,我想限制它们(JS脚本)访问Java模块。(特别禁止某些Java类)

我不想限制对Java类的所有访问,只是想找到一种方法来限制或禁止某些特定的Java类。

Nashorn中,我们可以通过使用ClassFilters(覆盖'exposeToScripts()'方法)来实现这一点,如下所示。

class MyCF implements ClassFilter {
@Override
public boolean exposeToScripts(String s) {
if (s.compareTo("myPackage.MyClass") == 0) return false;
return true;
}
}

但是我们如何使用Java Security Manager来做同样的事情,或者使用ClassFilter(如上所述)的方式是否足以捕获和限制所有不需要的Java类访问。

ClassFilter不是安全管理器的替代品!ClassFilter JEP页面->http://openjdk.java.net/jeps/202在非目标部分明确说明:

/[这并没有]使脚本的安全管理器变得多余。在评估来自不可信来源的脚本之前,嵌入应用程序仍应打开安全管理。单独的类筛选不会提供完整的脚本"沙箱"。/

ClassFilter是对安全管理器的更精细的控制。例如,您可以通过阻止访问java.lang.thread类[及其按名称划分的子类]来避免从脚本创建线程。

最新更新