碰到的问题是需要 运行客户自己编程的代码,同时要保证安全性,在碰到 system("rm")时,保证不抓狂
Ruby 自身是带有安全机制的,详细参看 Programming Ruby 2nd , 第25章 Ruby 安全
简略的说Ruby有四个安全级(详细参看Programming Ruby),等级4正是客户代码运行的理想的环境,不会污染到其他代码,也不会破坏系统,相当严格
示例代码如下:
def safely(code) sandbox = lambda do input = "something" $SAFE = 4 eval code end sandbox.call end code = File.new("file.rb").read result = safely(code) puts result
代码很简单
def safely(code) temp_box = lambda do input = "something" eval code end sandbox = lambda do $SAFE = 4 temp_box.call end sandbox.call end code = File.new("file.rb").read result = safely(code) puts result当code中的代码是 system("shutdown")的时候,你很有可能看不到下面的内容(是很有可能,可以来测试你是不是有管理员的权限,当然也可以用 system("format")测试,未知结果)
class Test def safely sandbox = lambda do self.class.taint $SAFE = 4 #code def something "success !!" end something #code end end sandbox.call end end result = Test.new.safely puts result
class Test def safely sandbox = lambda do self.taint $SAFE = 4 #code def self.something "success !!" end something #code end end sandbox.call end end result = Test.new.safely puts result
请发表评论