我正在制作类似 leetcode 的网站,在后端我需要沙箱用户的代码来保护资源,而不使用 Docker 或容器化之类的东西。保护我的系统免受用户执行代码影响的最佳方法是什么?就像用户导入 os 和 os.remove 一样,这对我的系统来说是致命的。
我需要一种沙盒或保护技术的方法或实施。
为了保护您的系统免受潜在有害的用户执行代码的影响,您可以使用一种称为沙箱的技术
RestrictedPython:这是一个有助于定义可安全执行的 Python 子集的工具。它可以用来执行不会损害系统的Python脚本。
Pypy-sandbox:PyPy 包含沙箱功能,可以以完全安全的方式运行不受信任的 Python 代码。
基于 Web 的 Python 执行环境: Repl.it 等服务提供的 API 允许您在安全的沙盒环境中执行用户代码。
您可以使用RestrictedPython安全地执行用户代码:
from RestrictedPython import compile_restricted
from RestrictedPython import safe_builtins
source_code = """
def test():
return 'Hello, World!'
"""
byte_code = compile_restricted(
source_code,
filename='<inline code>',
mode='exec'
)
# Create a safe environment with only the safe builtins available
safe_globals = {'__builtins__': safe_builtins}
# Execute the byte code
exec(byte_code, safe_globals)
# Now you can call the function
print(safe_globals['test']())
仅允许安全操作的受限环境中的Python代码。如果用户尝试执行有害操作,例如删除文件,则操作将失败,因为操作系统模块在受限中不可用。