我正在开发一个rails应用程序,它将ruby代码作为输入并执行它。由于提交的代码来自不受信任的域,我想限制对某些方法和模块的访问。例如,我不希望用户访问File.read
或open()
。
此外,是否可以限制只访问少数几个模块?用户提交的代码只能要求白名单中的模块。
我可以对用户代码进行验证,但我想检查ruby语言或任何模块是否已具备此功能。
Codeschool.com有互动教程。我想知道他们是否限制访问用户代码或进行任何验证。
答案 0 :(得分:3)
Ruby有一个内置功能,$SAFE
您可以在此处找到一些基本介绍http://edwinmeyer.com/Release_Integrated_RHG_09_10_2008/chapter07.html 然后你可以轻松谷歌更多(我只能推荐书籍)
另请看这里 http://www.ruby-doc.org/docs/ProgrammingRuby/html/taint.html
根据我的记忆,这里的解决方案是加载你的应用程序,然后在一个线程中将$SAFE
级别提升到4,在那里执行代码(这不能在以后降低,所以你首先需要允许Rails加载在0级)
答案 1 :(得分:2)
我总是对shikashi满意地使用这种任务。