2009-10-18 21 views
2

预定义的一组对象必须聚合到一个新对象中。不过,我希望用户为此指定一个自定义函数。在Ruby/Rails应用程序中允许用户定义的脚本

现在幼稚的做法是

def foo; end 

objects = [1,2,3] 
# result = eval(user_script) 
result = eval("objects.inject {|sum, n| sum + n }") 

明显不想做!我读了约$SAFE = 4(见here),但我不确定这是否足够。尤其是因为用户定义的脚本仍然可以调用foo等其他功能。我只想允许访问基本的非危险的Ruby核心函数。

有没有Ruby允许安全执行用户定义脚本的设施?我不需要是Ruby语法。不过,这很好。

回答

2

你见过Sven Fuch的safemode插件吗(overview here)?这里是GitHub的page

它将$ SAFE所做的危险方法列入黑名单,它解析传入的代码并删除任何不在白名单上的方法。该插件附带预定义的白名单,可在this file中查看。

我个人从未使用过这个插件,但作者在Ruby社区中很活跃,我相信他会回答您提出的任何问题。

+0

这太棒了!在rubyverse中很难找到这样的事情。 – 2009-10-18 18:08:44

0

世界上最好的锁并不能防止你被盲目抢劫,如果你选择给世界上每个人的钥匙。

+0

的确,这就是为什么我只给版主添加这样的代码的权利。 – 2009-10-18 18:07:48

相关问题