Ruby的脚本引擎?

Ruby的脚本引擎?,ruby,security,scripting,extensibility,sandbox,Ruby,Security,Scripting,Extensibility,Sandbox,我正在创建一个RubyonRails网站,其中一个部分需要是动态的,这样(sorta)受信任的用户可以使网站的某些部分以不同的方式工作。为此,我需要一种脚本语言。在ASP.Net中的一个类似项目中,我编写了自己的脚本语言/DSL。但是我不能使用那个源代码(在工作中编写),如果不需要的话,我也不想再使用另一种脚本语言 那么,我有什么选择呢?脚本必须被锁定,不能使我的服务器或任何东西崩溃。我真的很想使用Ruby作为脚本语言,但这并不是绝对必要的。此外,该脚本部分将在几乎每个网站请求中调用,有时不止一

我正在创建一个RubyonRails网站,其中一个部分需要是动态的,这样(sorta)受信任的用户可以使网站的某些部分以不同的方式工作。为此,我需要一种脚本语言。在ASP.Net中的一个类似项目中,我编写了自己的脚本语言/DSL。但是我不能使用那个源代码(在工作中编写),如果不需要的话,我也不想再使用另一种脚本语言

那么,我有什么选择呢?脚本必须被锁定,不能使我的服务器或任何东西崩溃。我真的很想使用Ruby作为脚本语言,但这并不是绝对必要的。此外,该脚本部分将在几乎每个网站请求中调用,有时不止一次。因此,速度是一个因素

我看着RubyLuaBridge,但它是Alpha状态,似乎已经死了

在Ruby项目中,脚本语言有哪些选择?


此外,我将完全控制该项目的部署位置(根访问),因此没有真正的限制。

JRuby呢?您可以使用许多脚本语言的java实现,例如javascript、scheme等,尽管它的版本是0.1.0…

但是,由于它还没有被推荐,所以正如鹤嘴锄书所描述的那样。这使您可以使用Ruby作为语言,而不会出现明显的减速

这种技术旨在允许对不受信任的Ruby代码进行安全的沙箱处理,错误修复和讨论旨在保持这种方式,但无限循环和其他一些东西仍然允许恶意用户锁定CPU。()

我不知道的是如何从安全线程之外返回本质上安全的数据。例如,单例对象可以模拟任何类,然后在返回线程中调用任何方法时执行危险的操作。我还在谷歌上搜索。(Ruby编程语言说第4级“阻止元编程方法”,这将允许您安全地验证返回对象的类,我认为这将使结果可以安全使用。)


除此之外,实现具有动态作用域的Lisp-1可能并不难(*snrk*),因为您已经有了垃圾收集器。

脚本引擎应该能够准确地实现什么?它只需要不太神秘(假设初学者或非程序员都可以使用)并且需要图灵完成。它必须能够与我的Ruby程序接口,以便获得执行某些计算和确定所需的数据。另外,它必须可以链接到商业项目,所以没有GPL,但我希望它是开源的。你可以始终使用
eval
,这取决于你对用户的信任程度:)@DR(顺便说一句,两个字母的名称不会收到通知)我不太信任他们,这是个问题。即使我这样做了,我仍然不会相信一个在实时服务器上有eval提示符的初学者。非常类似的问题:如果我要走这条路,我可能只需要一个C-lua实现,并使用IPC从我的ruby程序与之通信..lisp。。。唉。。第一个问题:我不懂lisp,所以我必须学习它,然后实现它。第二个问题:Lisp并不是最理想的初学者语言。rufus lua的版本是1.1.0:它被用于其他项目中:噢。。。层压材料。我想这证明了它也可以在ruby中进行沙盒处理。这可能是公认的答案。。