在 python 上对用户编写的代码进行沙箱处理,无需容器化[重复]

问题描述 投票:0回答:1

我正在制作类似 leetcode 的网站,在后端我需要沙箱用户的代码来保护资源,而不使用 Docker 或容器化之类的东西。保护我的系统免受用户执行代码影响的最佳方法是什么?就像用户导入 os 和 os.remove 一样,这对我的系统来说是致命的。

我需要一种沙盒或保护技术的方法或实施。

python sandbox
1个回答
0
投票

为了保护您的系统免受潜在有害的用户执行代码的影响,您可以使用一种称为沙箱的技术

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代码。如果用户尝试执行有害操作,例如删除文件,则操作将失败,因为操作系统模块在受限中不可用。

© www.soinside.com 2019 - 2024. All rights reserved.