gpt4 book ai didi

java - JRuby DSL封装,排除标准库

转载 作者:数据小太阳 更新时间:2023-10-29 07:37:56 30 4
gpt4 key购买 nike

我正在尝试制作一个 Java 程序,允许用户使用我编写的 Ruby DSL 执行一些有限的脚本。用户编写的脚本被保存到 JRuby 中的 Proc 对象中。问题在于用户仍然可以访问 Ruby 标准的方法,例如 File.new,或者创建类,或者基本上与程序或计算机的其他内部逻辑混淆。

有没有办法使用 JRuby 或 Ruby 甚至 Java 将用户的脚本限制为仅受 DSL 的约束?或者至少删除用户对某些类的访问权限?

最佳答案

由于您在 JRuby 下运行,您可以使用 Java security policy ( policy file documentation ) 以防止用户执行文件或网络 I/O 等操作。当然,这也会让您的代码无法拥有这些功能!您可以通过 jar URI 或 jar 签名将代码列入白名单,因此一种策略是创建一个可信代码的“外壳”,强烈验证其输入,将其打包在自己的 jar 中,信任它,并将其专门用于您自己的代码。正确地做到这一点很快就会变得复杂(有一个广泛的测试套件!),但它是可以做到的。

要显式控制 DSL 可用的命名空间,您可以使用 BasicObject .它不会混入 Kernel 或标准 Ruby 命名空间中可用的任何其他内容。但是,这不会给您安全,因为用户仍然可以直接使用::Fileinclude::Kernel 来恢复它!

关于java - JRuby DSL封装,排除标准库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20382570/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com