是否可以在pypy沙箱中使用numpy并写出文件?

时间:2014-05-20 18:56:59

标签: python numpy matplotlib sandbox pypy

我希望能够使用numpy和matplotlib运行不受信任的python脚本来生成和保存图像。这可能吗?

所以:

  1. 我可以在pypy沙箱中运行时导入numpy和matplotlib吗?我尝试将numpy site-packages目录复制到我的临时沙箱目录中,但是当我尝试“导入numpy”时,我收到此错误:“ ImportError:没有名为_numpypy的模块”。

    < / LI>
  2. 是否可以从pypy沙箱中写出文件?我认为该文件必须位于pypy sandbox临时目录中,但即使这样我也会得到一个IOError:“ IOError:[Errno 2]没有这样的文件或目录:'/ tmp / out.txt'

  3. 这是我试图在沙箱中运行的简单脚本,untrusted.py:

    # This import will fail.
    import numpy
    
    # This works fine.
    print 'SOMETHING'
    
    # This works fine.
    with open('/tmp/in.txt', 'r') as i:
        print i.read()
    
    # This throws an IOError.
    with open('/tmp/out.txt', 'w') as f:
        f.write('TESTING')
    

    这是我用来运行它的命令:

    ./pypy/sandbox/pypy_interact.py --tmp=mydir ./pypy/goal/pypy-c untrusted.py
    

    有关pypy sandboxing的更多信息: http://doc.pypy.org/en/latest/sandbox.html

    非常感谢!

1 个答案:

答案 0 :(得分:3)

  1. 默认情况下,_numpy模块未包含沙盒版本,因为没有人仔细检查包含它是否安全。粗略地说它应该,但是有许多细节可能出错:例如,一些模糊的调用序列可能会导致越界内存访问(与沙盒方法形成对比)采用PyPy的其余部分,它开箱即用于所有内部对象操作,因为它们是在GC管理的数组上完成的,而不是在原始的malloc()ed内存上完成的。还有一种风险是,_numpy使用的C库中实现的某些模糊功能会为攻击者提供一个逃逸点。总而言之,我说这种方法对_numpy不起作用(除非有人偏执,否则在每次_numpy变化后都会检查其安全性,这种情况不太可能发生)。考虑使用操作系统级别的沙盒,使用常规PyPy或CPython。

  2. 文件写入是文档中大警告的一个示例:&#34; PyPy方面的艰苦工作已经完成 - 您将获得完全安全的版本。只有实验性和未经修改的是从常规Python解释器(CPython或未经过盒装的PyPy)使用这个沙盒PyPy的库。欢迎捐款。&#34;