Python 沙盒限制由于执行环境需要同时为多个应用提供服务,为了防止应用代码对执行环境及其它应用的破坏,做到应用之间的隔离,我们对Python执行环境进行了一定的功能限制,这些限制包括:
文件系统访问限制
应用目录、临时目录允许读,其它禁止读。
临时目录下允许写、创建目录、删除目录、创建文件、删除文件,其它目录禁止。
临时文件支持
修改了 tempfile.py,保留所有的类、函数,但是确保返回的临时文件或目录在用户自己的临时文件目录下
网络访问限制
只允许创建TCP 协议的socket
只允许访问环境变量指定的后端服务,其它都禁止
禁止创建多进程
禁止os.fork
禁止subprocess, popen2, pipes, _multiprocessing 模块
多线程限制
允许多线程,但线程的生命周期被限定在一次请求之内;每次请求结束后,若应用创建的进程不结束,则由执行环境强制回收。
用户最多允许创建10个线程
信号限制
signal模块中的所有函数都被限制
C扩展模块限制
允许加载系统路径下的C模块,如 math.so;其它目录的C扩展模块禁止加载。
模块加载
允许从系统路径、应用目录下加载模块;其它路径禁止
Zip 模块支持
允许从 应用目录下的zip 文件中导入纯python模块,但不允许导入C扩展模块
封禁模块
从标准库中去掉 'ctypes', '_ctypes_test', 'dl', 'nis', 'resource', 'sqlite', 'fcntl', 'spwd', 'pwd', 'grp', 'syslog', '_multiprocessing' 等模块。(这些都是C扩展模块)
封禁函数:
Posix 模块允许如下系统调用,其它禁止。
允许函数: Access, chmod, chown, getcwd, listdir, mkdir, readlink, rename, rmdir, stat, unlink, remove, utime, getpid, getuid, open, fdopen, close, lseek, read, write, strerror, chdir
限制函数:
对posix模块的 rmdir, unlink, rename, link, chmod, chown, listdir, mkdir, open, fdopen, 等函数的参数中的文件路径进行了限制
对builtin模块, execfile() 只能执行应用自己目录下的模块; compile() 只能设置文件名为应用自己目录下的某个模块对应的文件名。