【问题标题】:Protect script from hacking (reading directories, modifying files)保护脚本免受黑客攻击(读取目录、修改文件)
【发布时间】:2012-03-04 18:08:22
【问题描述】:

我正在尝试编写脚本,它将自动运行我的所有测试并检查失败,就像那样(只需使用“ruby 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​​ 脚本免受此类黑客攻击的方法是什么?

【问题讨论】:

  • 不同的操作系统有不同的权限模型。您使用的是哪个操作系统?
  • 我只能重复一遍:如果您想安全,请不要遵循已接受答案中给出的建议。你会被黑。

标签: ruby unit-testing testing


【解决方案1】:

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

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

您的测试系统将首先将整个测试根文件夹复制到沙箱(例如在临时位置创建),授予测试用户访问此沙箱的权限并以测试用户身份执行测试。

因此,测试执行文件的创建/修改/删除仅限于此沙箱。此外,您可以稍后分析留在此沙箱中的所有测试事后数据。

我在 linux 中轻松做到了这一点,在 /tmp 目录上创建文件夹并使用名为“tester”的特殊用户。

希望这会有所帮助。

【讨论】:

  • 你描述的不是沙箱。该代码仍然具有读取/etc/passwd 等系统文件或其中包含潜在敏感数据的配置文件的权限。此外,该代码仍然可以将自身连接到 Internet 并执行命令,例如生成一个反向 shell,恶意人员可以使用它来尝试利用您的服务器。这是不推荐的。至少使用 chroot,甚至更好,$SAFE 结合 Ruby 沙盒解决方案结合 RBAC 系统甚至虚拟机。
  • 非常合乎逻辑的解决方案,谢谢!我会尝试通过 Ruby 来实现这样的东西。
  • 找到了一些关于 Ruby 沙盒的演示:youtube.com/watch?v=6XxCOYco3Egbestechvideos.com/2009/06/04/…
  • 你是完全正确的尼克拉斯。我对我的代码的意图不是反对恶意使用测试,而只是反对可能写得不好并且不愿意损坏其他一些测试文件的测试。因此,我确实编写了“沙盒”,而不是直接编写沙盒。我的意思不是完全没有损坏,而是没有因小错误造成的意外损坏。
猜你喜欢
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
  • 2016-02-06
  • 2011-01-31
相关资源
最近更新 更多