代码之家  ›  专栏  ›  技术社区  ›  Mike

为什么我在沙盒代码时得到“不安全的操作在4级写入”?

  •  2
  • Mike  · 技术社区  · 15 年前

    我有以下Ruby代码:

    测试用例.rb:

    filename = "/absolute/path/to/Untrusted.rb"
    thread = Thread.new do
      $SAFE = 4
      Kernel::load(filename, true)
    end
    thread.join
    

    不可信.rb

    #Untrusted code
    puts "Untrusted!"
    

    但是,我在尝试运行Testcase.rb时遇到一个错误:

    /Volumes/Data/Users/mike/Desktop/Testcase.rb:4:in `write': Insecure operation `write' at level 4 (SecurityError)
        from /Volumes/Data/Users/mike/Desktop/Testcase.rb:7:in `join'
        from /Volumes/Data/Users/mike/Desktop/Testcase.rb:7
    

    $SAFE=4 解决了这个问题,但我希望能够安全地运行不受信任的代码。你知道为什么这样不行吗?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Wayne Conrad    15 年前

    我试过你的代码,结果和你一样。然后我将$SAFE级别更改为3,并得到以下警告:

    Insecure world writable dir /tmp in LOAD_PATH, mode 041777
    

    我将要从/tmp加载的文件移到了一个不可写的目录,警告消失了。将$SAFE级别更改为4,然后就起作用了。

    因此,请尝试确保加载的文件的目录不是可写的。同时尝试一个较低的安全级别,看看是否得到有用的警告。

        2
  •  0
  •   alexyorke    15 年前

    如果您在沙盒中运行,它不允许运行不安全的代码,因为沙盒有它的目的,阻止您执行不允许或不安全的操作。