我试图添加一个脚本功能,我们的系统不受信任的用户可以写简单的脚本,并让他们在服务器端执行。我试图使用Nashorn作为脚本引擎。如何阻止Nashorn允许quit()函数?
不幸的是,他们增加了一些非标准的功能,犀牛:
https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/shell.html#sthref29
向下滚动到“其他犀牛内置函数”,看到了“退出()”函数。是的,如果不受信任的用户运行此代码,则整个JVM将关闭。
这是奇怪的,因为犀牛特别是预计运行不可信的脚本。请参阅:https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/api.html#classfilter_introduction
应用嵌入了犀牛,尤其是服务器端JavaScript 框架,经常有来自不受信任来源的运行脚本,因此必须 限制访问的Java API。这些应用程序可以通过 实现ClassFilter接口来将Java类的访问权限限制为Java类的一个 子集。
有什么办法来防止这种行为?如何防止用户运行任何附加功能?
你一定要开始一个新的进程来运行不可信用户的代码。但也见... http://stackoverflow.com/questions/24466203/how-to-remove-java-apis-from-nashorn-engine – kervin
谢谢,这是一个非常有用的链接。但是没有选择来阻止quit()。我尝试了{“-strict”,“--no-java”,“--no-syntax-extensions”,“--optimistic-types = true”}和quit()仍然退出。 – ccleve