我目前正在使用沙盒 PyPy 编写 Python 沙盒。基本上,沙箱通过提供一个“ Controller ”来工作,该 Controller 将系统库调用映射到指定的函数。按照 codespeak 中的说明进行操作后(通过设置过程),我意识到默认 Controller 不包括 os.fstat()
的替代品,因此当我调用 open()
时崩溃>。具体来说,包含的 pypy/translator/sandbox/sandlib.py
不包含 do_ll_os__ll_os_fstat
的定义。
到目前为止,我已经将其实现为:
def do_ll_os__ll_os_fstat(self, fd):
return os.fstat(fd)
这似乎工作正常。这样安全吗?这会在沙箱中造成漏洞吗?
fstat 调用可以揭示某些您可能不想保密的信息。除其他事项外:
- 两个文件描述符是否在同一个文件系统上
- 底层文件系统的 block 大小
- 文件所有者的数字 UID/GID
- 文件的修改/访问时间
但是,它不会修改任何内容,所以如果您不介意这种(相对较小的)信息泄露,没问题。您还可以更改某些结果以屏蔽您想要隐藏的信息(例如,将所有者 UID/GID 设置为 0)
我是一名优秀的程序员,十分优秀!