2012-03-04 68 views
0

我尝试写剧本,将运行我所有的自动测试和检查故障,水木清华这样的(保护脚本只需运行与“红宝石file.rb”和解析输出测试):从黑客(读目录,修改文件)

def failures?(test_file) 
    io = IO.popen("ruby #{test_file}") 
    log = io.readlines 
    io.close 

    # parsing output for failures "1 tests, 1 assertions, 0 failures, 0 errors" 
    log.last.split(',').select{ |s| s =~ /failures/ }.first[/\d+/] != "0" 
end 

puts failures?("test.rb") 

但有人可以轻松地放置在“test_file里面”的一些恶意代码和粉碎一切:

Dir.glob("*") 
Dir.mkdir("HACK_DIR") 
File.delete("some_file") 

的目的是保护Ruby脚本从这些黑客的方式吗?

+1

不同的操作系统有不同的权限模型。你在使用哪种操作系统? – 2012-03-04 18:11:40

+0

我只能重复一遍:如果你想要安全,不要按照接受的答案给出的建议。你会被黑客入侵。 – 2012-03-04 19:21:20

回答

0

我做了类似的事情,但使用“沙箱”的概念。

首先创建一个没有权限的任何您的操作系统文件(当然不是你的测试文件或者)一个测试用户。

你的测试系统会先在整个试验根文件夹复制到沙箱(在例如一个临时位置创建的),得到检验用户的权限在此沙箱和执行测试以测试用户。

所以,测试的执行文件的创建/修改/删除仅限于这个沙箱。此外,您可以稍后分析此沙箱中剩余的所有测试后验数据。

我在Linux能这样轻松在/ tmp目录创建文件夹,并使用名为“测试仪”的特殊用户。

希望这会有所帮助。

+1

你描述的不是一个沙箱。该代码仍然对系统文件(如/ etc/passwd)或配置文件具有读取权限,这些文件中可能包含敏感数据。此外,代码仍然可以将自己连接到互联网并执行命令,例如产生一个恶意人员可以用来尝试和利用您的服务器的反向shell。这不能被推荐。至少使用chroot或者更好的'$ SAFE'结合RBAC系统甚至虚拟机结合使用Ruby沙盒解决方案。 – 2012-03-04 19:18:23

+0

非常合乎逻辑的解决方案,thanx!我会尝试通过Ruby来实现这样的行为。 – makaroni4 2012-03-04 19:21:32

+0

在Ruby中发现了一些沙盒演示: http://www.youtube.com/watch?v=6XxCOYco3Eg http://www.bestechvideos.com/2009/06/04/pivotal-labs-talks -pla-with-fire-running-uploaded-ruby-code-in-a-sandbox – makaroni4 2012-03-04 19:45:28