nol*_*olk 16 ruby permissions web-applications ruby-on-rails
我想让我的用户创建Ruby脚本,对驻留在Web服务器上的某些数据进行计算,然后输出结果.脚本在服务器上执行.有没有办法安全地做到这一点?
更具体地说,我想:
是否有任何图书馆或项目可以满足我的要求?如果不是在Ruby中,也许还有其他语言?
Way*_*rad 17
您可以使用"空白平板"作为洁净室,并使用沙箱将安全级别设置为4.
一个空白的石板,你剥夺了所有方法的对象:
class BlankSlate
instance_methods.each do |name|
class_eval do
unless name =~ /^__|^instance_eval$|^binding$|^object_id$/
undef_method name
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
洁净室是一个对象,您可以在其中评估其他代码:
clean_room = BlankSlate.new
Run Code Online (Sandbox Code Playgroud)
从不受信任的源读取命令,然后取消它.除非没有注意,否则Ruby会拒绝在沙盒中评估字符串.
command = gets
command.untaint
Run Code Online (Sandbox Code Playgroud)
现在在沙箱中执行字符串,将安全级别提升到最高位置.当proc结束时,$ SAFE级别将恢复正常.我们在洁净室的绑定环境中执行命令,这样它只能看到洁净室可以看到的方法和变量(但是,请记住,就像任何对象一样,洁净室可以在全局范围内看到任何内容).
result = proc do
$SAFE = 4
clean_room.instance_eval do
binding
end.eval(command)
end.call
Run Code Online (Sandbox Code Playgroud)
打印结果:
p result
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1251 次 |
最近记录: |