Python 的 rexec
模块(Restricted Execution)自 Python 2.3 起已被弃用,并在 Python 3 中彻底移除,主要因其安全性问题无法彻底解决。以下是替代方案及相关技术细节:
Pyodide
或 RustPython
编译为 Wasm。seccomp
库限制 Python 进程:seccomp
库限制 Python 进程:RestrictedPython
或 AST 转换。结合 Docker 和 RestrictedPython 实现多层防护:
# Dockerfile
FROM python:3.9
RUN pip install RestrictedPython
COPY script.py .
CMD ["python", "script.py"]
# script.py
from RestrictedPython import safe_builtins, compile_restricted
code = compile_restricted("print(max(1, 2))", '<string>', 'exec')
exec(code, {'__builtins__': safe_builtins})
Python 沙盒的替代方案需根据场景选择,推荐组合使用容器隔离、静态分析(如 AST 限制)和系统级防护(如 seccomp)。对于关键系统,建议审计所有第三方依赖并最小化权限。