【问题标题】:A scripting engine for Ruby?Ruby 的脚本引擎?
【发布时间】:2010-04-04 18:23:26
【问题描述】:

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

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

我查看了 RubyLuaBridge,但它处于 Alpha 状态,似乎已经死了。

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

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

【问题讨论】:

  • 脚本引擎到底应该具备什么能力?
  • 它只需要不太神秘(假设初学者或非程序员都可以使用)并且需要图灵完备。它必须能够与我的 Ruby 程序交互,以便获取数据以执行某些计算和确定。此外,它必须可以与商业项目链接,因此没有 GPL,但我希望它是开源的。
  • 您始终可以使用eval,具体取决于您对用户的信任程度:)
  • @DR(顺便说一句,2 个字母的名字没有收到通知)我不太相信他们是问题所在。即使我这样做了,我仍然不会相信在实时服务器上带有 eval 提示的初学者程序员。
  • 非常相似的问题:stackoverflow.com/questions/406833/…

标签: ruby security scripting extensibility sandbox


【解决方案1】:

还有Rufus-lua,虽然它的版本是0.1.0...

【讨论】:

【解决方案2】:

JRuby 怎么样?您可以使用许多脚本语言的java实现,例如javascript,scheme等

【讨论】:

  • 如果我要走那条路,我可能只需要一个 C-lua 实现并使用 IPC 从我的 ruby​​ 程序中与它通信..
【解决方案3】:

好吧,由于尚未提出建议,因此有如 Pickaxe 书中所述的 Locking Ruby In The Safe。这使您可以使用 Ruby 作为语言,而不会显着降低 AFAIK。

此技术旨在允许对不受信任的 Ruby 代码进行安全沙箱化,并且错误修复和讨论旨在保持这种状态,但无限循环和其他一些东西仍然允许恶意用户锁定 CPU . (e.g. this discussion maybe.)

我不知道的是如何从安全线程外部返回本质上可以安全使用的数据。单例对象(例如)可以模仿任何类,然后在返回线程中调用任何方法时做一些危险的事情。我仍然在谷歌上搜索它。 (Ruby 编程语言说第 4 级“阻止元编程方法”,这将允许您安全地验证返回对象的类,我想这将使结果可以安全使用。)

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

【讨论】:

  • lisp... 叹息.. 第一个问题:我不知道 lisp,所以我必须学习它然后实现它。第二个问题:Lisp 不是最理想的初学者语言..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 2012-03-28
  • 1970-01-01
  • 2018-04-27
  • 2010-09-10
  • 1970-01-01
相关资源
最近更新 更多