有没有一种安全的方法在Ruby中运行eval?

时间:2011-07-14 16:58:50

标签: ruby-on-rails ruby sandbox

我们正在开发一种对Tropo有类似要求的产品(参见https://github.com/tropo/tropo-samples/tree/master/ruby),允许用户编写一个可以访问传入的一些函数和变量的ruby脚本。但是,我们希望避免用户访问全局调用,删除所有用户或终止程序。有没有办法用eval完成这个?

3 个答案:

答案 0 :(得分:3)

这在很大程度上取决于你如何实现它,但是研究使用与eval的绑定。通过创建自己的绑定并使用“安全”对象预加载它,您可以限制用户可以对其代码执行的操作。

http://rdoc.info/stdlib/core/1.9.2/Binding

答案 1 :(得分:0)

设置$ SAFE参数?这应该确保你不会评估不受信任的字符串,无论如何......

答案 2 :(得分:0)

Ruby提供了一个基于“受污染”对象的安全模型。

你可能想要check that。无论如何注意,创建DSL比eval更安全(更有趣!)