我希望能够使用numpy和matplotlib运行不受信任的python脚本来生成和保存图像。这可能吗?
所以:
我可以在pypy沙箱中运行时导入numpy和matplotlib吗?我尝试将numpy site-packages目录复制到我的临时沙箱目录中,但是当我尝试“导入numpy”时,我收到此错误:“ ImportError:没有名为_numpypy的模块”。
< / LI>是否可以从pypy沙箱中写出文件?我认为该文件必须位于pypy sandbox临时目录中,但即使这样我也会得到一个IOError:“ IOError:[Errno 2]没有这样的文件或目录:'/ tmp / out.txt'”
这是我试图在沙箱中运行的简单脚本,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
非常感谢!
答案 0 :(得分:3)
默认情况下,_numpy
模块未包含沙盒版本,因为没有人仔细检查包含它是否安全。粗略地说它应该,但是有许多细节可能出错:例如,一些模糊的调用序列可能会导致越界内存访问(与沙盒方法形成对比)采用PyPy的其余部分,它开箱即用于所有内部对象操作,因为它们是在GC管理的数组上完成的,而不是在原始的malloc()ed内存上完成的。还有一种风险是,_numpy使用的C库中实现的某些模糊功能会为攻击者提供一个逃逸点。总而言之,我说这种方法对_numpy不起作用(除非有人偏执,否则在每次_numpy变化后都会检查其安全性,这种情况不太可能发生)。考虑使用操作系统级别的沙盒,使用常规PyPy或CPython。
文件写入是文档中大警告的一个示例:&#34; PyPy方面的艰苦工作已经完成 - 您将获得完全安全的版本。只有实验性和未经修改的是从常规Python解释器(CPython或未经过盒装的PyPy)使用这个沙盒PyPy的库。欢迎捐款。&#34;