Java/Scala Nashorn禁用退出()?

Java/Scala Nashorn禁用退出()?,java,scala,Java,Scala,您好,有没有办法在Java中禁用Nashorn的exit函数 当前如果我有脚本引擎(Scala): 我仍然可以运行以下程序: engine.eval("exit(1);"); engine.eval("exit = undefined"); 我的意思是它是javascript,因此我可以在使用以下内容之前进行评估: engine.eval("exit(1);"); engine.eval("exit = undefined"); 然而,我认为我可以用java代码使其更加安全,有没有办法使

您好,有没有办法在Java中禁用Nashorn的exit函数

当前如果我有脚本引擎(Scala):

我仍然可以运行以下程序:

engine.eval("exit(1);");
engine.eval("exit = undefined");
我的意思是它是javascript,因此我可以在使用以下内容之前进行评估:

engine.eval("exit(1);");
engine.eval("exit = undefined");

然而,我认为我可以用java代码使其更加安全,有没有办法使Nashorn脚本引擎更加严格,这样的安全性在默认情况下是存在的?

多亏了其他人的帮助,我找到了两种方法:

要么像@matt建议的那样:

bindings.remove("exit");
或通过

engine.eval("exit = undefined");

您可以使用绑定和绑定;但这与您提出的解决方案基本相同。退出是唯一不安全的功能还是我错过了其他功能?取决于您对安全性评估的严格程度。load()或loadWithNewGlobal()在用户可能提供脚本片段的大多数用例中可能被认为是不安全的。您还可以使用quit()函数使用别名exit()。可以通过配置类过滤器、使用安全管理器或使用“-no Java”标志(JJS)@AxelFaust配置引擎来限制对Java类的反射/访问,因为在我的示例中,我已经有了“-no Java”标志,但它仍然感觉不安全。@ChristianSchmitt我错过了该参数。但安装安全管理器仍然是一种选择。默认情况下,通过eval()从字符串执行的脚本将被视为不安全的,并且应用了最严格的Java安全策略,而从文件/URL加载的所有脚本都可以通过普通策略文件进行安全保护(只要security manager框架允许)。这还应该允许您定义可以通过load()/loadWithNewGlobal()加载什么/如果脚本