我想让我的用户创建Ruby脚本,对驻留在web服务器上的一些数据进行计算,然后输出结果。脚本在服务器上执行。有没有什么方法可以安全地做到这一点?
更具体地说,我想:
有没有能满足我要求的库或项目?如果不是用Ruby,也许可以用其他语言?
发布于 2010-01-12 09:22:49
您可以使用“空白板”作为净室,并使用沙箱将safe level设置为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
clean room是一个对象,您可以在其中评估其他代码:
clean_room = BlankSlate.new
从不受信任的来源读取命令,然后将其清除。除非未被污染,否则Ruby将拒绝对沙箱中的字符串求值。
command = gets
command.untaint
现在在沙箱中执行字符串,将安全级别提高到最高。当过程结束时,$SAFE级别将恢复正常。我们在净室绑定的上下文中执行该命令,以便它只能看到净室可以看到的方法和变量(但请记住,像任何对象一样,净室可以看到全局场景中的任何内容)。
result = proc do
$SAFE = 4
clean_room.instance_eval do
binding
end.eval(command)
end.call
打印结果:
p result
https://stackoverflow.com/questions/2045324
复制相似问题