我想为我们的用户提供在服务器端编写脚本的能力。(我们的应用程序是面向开发人员的)。我希望他们能够在我们的应用程序中调用一些函数,创建变量,并进行基本的循环和分支。不过,我希望他们的脚本被沙盒化,这样他们就无法破解并写入磁盘或打开网络连接或弄脏我们应用程序的内部结构。把它想象成一个 SQL 存储过程:你可以与服务器交互,但不能与外界交互。
是否有任何用于 JVM 的预构建脚本语言可以做到这一点?我可以编写自己的 DSL,但工作量很大。
几年前,我开始使用 Rhino 进行类似的操作,但结果证明我无法正确地对其进行沙箱处理。很乐意使用 GraalJS,但我不知道它是否可沙盒。有一些关于停止恶意代码的参考(https://www.graalvm.org/docs/graalvm-as-a-platform/embed/#reliable-timeouts-for-malicious-code),但它看起来像一个 JS 脚本仍然可以访问宿主应用程序中的各种东西。