我正在尝试对 JSR-223 进行沙箱处理。具体来说,我不希望任何脚本访问我的任何类。 (我听说 Rhino 可以使用 ClassShutter 做到这一点,但我想一般地做到这一点。即对于 JSR-223 的所有脚本引擎)。
我首先尝试使用AccessController.doPrivileged
解决方案,根本不传递任何权限。它适用于大多数权限,但脚本仍然可以访问我的所有公共类(它似乎忽略“包访问”权限......?)。
I 找到了这个。我的问题是:如何在脚本引擎上安装自定义类加载器? (或者如果必须的话,如何全局替换类加载器?)
ScriptEngineManager 有一个采用类加载器的构造函数。类加载器用于加载脚本引擎实现。由于类继承了它们的类加载器,因此脚本引擎及其创建的任何对象也应该使用该类加载器。
该类加载器需要拒绝任何未列入白名单的类的存在。
最重要的是使用自定义的 SecurityManager,以便您可以根据正在使用的类加载器进行访问检查。
Edit:这是我在上面找到的一篇文章Java 中的沙箱 Rhino。其中大部分内容也应适用于 JSR-223。 Sun的实现是Rhino的修改,因此可能存在一些差异。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)