2009-10-18 78 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

相關問題