如何允许最终用户在特定安全约束下在 JEE 环境中运行脚本?

Posted

技术标签:

【中文标题】如何允许最终用户在特定安全约束下在 JEE 环境中运行脚本?【英文标题】:How can I allow a final user to run scripts in a JEE environment under specific security constraints? 【发布时间】:2013-12-03 17:17:16 【问题描述】:

我的 JEE 应用在 tomee 下运行,允许用户编写他/她自己的脚本并从 web gui 运行,但我想限制某些操作,例如 System.exit(1)。

可以在 beanshell2 论坛中找到与此问题相关的讨论 - 看看这个 - http://code.google.com/p/beanshell2/issues/detail?id=15

在 JVM 中工作的任何可编写脚本的语言都可以,但我需要这种级别的控制。我的第一次尝试是使用 beanshell,但从上面的讨论中可以看出,这似乎不是一种选择。

我想避免使用更多深奥的语言,因为最终用户是技术人员,但我不能要求他/她学习未知的编程语言只是为了编写脚本 :-) [或者我可以,如果我不这样做'找不到任何有用的选项]

我怎样才能得到它?时髦?可能还有其他基于 JVM 的脚本语言吗?

【问题讨论】:

【参考方案1】:

Groovy 在CompilerConfiguration 中具有强大的功能。您可以选择可用的进口商品和许多其他东西。可以使用SecureASTCustomizer 将允许的内容列入白名单或列入黑名单

【讨论】:

我还要看看 Groovy Sandbox 项目(因为 SecureASTCustomizer 可以是 a bit leaky) Groovy Sandbox 绝对是这里的最佳选择,而 Kohsuke 的默认许可证是 MIT,在我的具体情况下它比 beanshell (GPL) 更好。【参考方案2】:

我很久以前就用过犀牛。它允许在 Java 应用程序(或服务器端)中运行 javascript。您可能需要手动管理安全问题。

不确定这是您要查找的内容,但它可以提供帮助:https://developer.mozilla.org/en-US/docs/Rhino

【讨论】:

好主意。也许,这就是我要找的东西 - forums.oracle.com/thread/1538661 - 谢谢

以上是关于如何允许最终用户在特定安全约束下在 JEE 环境中运行脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用用户设置的情况下在运行时读取/写入 app.config 设置?

静态成员初始化在调试和释放模式下在一个特定环境中的工作方

如何约束数据库表,使一列中只有一行可以具有特定值?

用户如何选择特定的文件位置在 Flutter 中保存文件

Prolog约束逻辑编程 - 如何在给定整数列表的情况下在域变量列表上设置域?

授权过滤器中的错误(JEE6)