【发布时间】:2015-09-16 14:56:17
【问题描述】:
我正在尝试向我们的系统添加脚本功能,不受信任的用户可以编写简单的脚本并让它们在服务器端执行。我正在尝试使用 Nashorn 作为脚本引擎。
不幸的是,他们为 Nashorn 添加了一些非标准功能:
https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/shell.html#sthref29
向下滚动到“Additional Nashorn Built-in Functions”并查看“quit()”函数。是的,如果一个不受信任的用户运行这段代码,整个 JVM 就会关闭。
这很奇怪,因为 Nashorn 专门预计会运行不受信任的脚本。见:https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/api.html#classfilter_introduction
嵌入 Nashorn 的应用程序,尤其是服务器端 JavaScript 框架,通常必须从不受信任的来源运行脚本,并且 因此必须限制对 Java API 的访问。这些应用程序可以 实现 ClassFilter 接口以限制 Java 类访问 Java 类的子集。
有没有办法防止这种行为?如何阻止用户运行任何附加功能?
【问题讨论】:
-
您绝对应该启动一个新进程来运行您不受信任的用户的代码。但也请看...stackoverflow.com/questions/24466203/…
-
谢谢,这是一个非常有用的链接。但是那里没有停止退出()的选项。我试过 { "-strict", "--no-java", "--no-syntax-extensions", "--optimistic-types=true" } 和 quit() 仍然退出。
标签: nashorn