Python 防止用户上载的代码执行恶意任务

Python 防止用户上载的代码执行恶意任务,python,django,django-1.7,Python,Django,Django 1.7,对于类项目,我们正在创建一个web项目,其中用户可以上传ai脚本(python代码)以玩游戏。我已经完成了文件上传部分,但我担心安全性和防止恶意代码 如何防止用户将恶意代码上传到应用程序? 使用PyPy创建python沙盒和/或 扫描并去除潜在危险的类导入(fs、system..等) 是沙箱方法的一个实例。 使用PyPy创建python沙盒和/或 扫描并去除潜在危险的类导入(fs、system..等) 是沙盒方法的一个活生生的例子。我建议您不要按关键字过滤。有更可靠的方法阻止恶意代码。我编写

对于类项目,我们正在创建一个web项目,其中用户可以上传ai脚本(python代码)以玩游戏。我已经完成了文件上传部分,但我担心安全性和防止恶意代码

如何防止用户将恶意代码上传到应用程序?

  • 使用PyPy创建python沙盒和/或
  • 扫描并去除潜在危险的类导入(fs、system..等)
是沙箱方法的一个实例。

  • 使用PyPy创建python沙盒和/或
  • 扫描并去除潜在危险的类导入(fs、system..等)

是沙盒方法的一个活生生的例子。

我建议您不要按关键字过滤。有更可靠的方法阻止恶意代码。我编写了这个小片段来说明恶意代码如何可能绕过字符串过滤过程:

test = """
def f():
    import os
    print((os.name))
f()
"""
obfus = []
for c in test: obfus.append(chr(ord(c) + 1))
obfus = ''.join(obfus)
obfus.replace("os", "**")
def hidden_things():
    print_os = []
    for c in obfus: print_os.append(chr(ord(c) - 1))
    exec(''.join(print_os))
hidden_things()
恶意代码编写者经常想出非常有创意的方法来规避安全性。这是一个非常简单的例子,说明比我聪明的人可以完成什么

修正案:

我在这个网站上发现了一些相关的问题:


我建议您不要按关键字过滤。有更可靠的方法阻止恶意代码。我编写了这个小片段来说明恶意代码如何可能绕过字符串过滤过程:

test = """
def f():
    import os
    print((os.name))
f()
"""
obfus = []
for c in test: obfus.append(chr(ord(c) + 1))
obfus = ''.join(obfus)
obfus.replace("os", "**")
def hidden_things():
    print_os = []
    for c in obfus: print_os.append(chr(ord(c) - 1))
    exec(''.join(print_os))
hidden_things()
恶意代码编写者经常想出非常有创意的方法来规避安全性。这是一个非常简单的例子,说明比我聪明的人可以完成什么

修正案:

我在这个网站上发现了一些相关的问题:


    • 在语言级别执行沙箱几乎是不可能的,因此您有两种选择:

    • 沙箱使用虚拟化层(如VirtualBox)或更轻量级的东西(如Google Native Client、LXC或Docker)对Python进程进行沙箱处理
    • 使用一个为你自己做这件事的服务

    • 在语言级别执行沙箱几乎是不可能的,因此您有两种选择:

    • 沙箱使用虚拟化层(如VirtualBox)或更轻量级的东西(如Google Native Client、LXC或Docker)对Python进程进行沙箱处理
    • 使用一个为你自己做这件事的服务

    • 我同意沙箱的想法;但我会厌倦依赖过滤器来去除进口产品。@Motoko请详细说明原因?我同意沙箱的想法;但我会厌倦依赖过滤器来剥离导入。@Motoko请详细说明原因?如果您构建一个广泛的API剥离潜在的危险类导入,上述代码将中断。。。所以我不知道这段代码说明了什么。如果你构建了一个广泛的API,去掉了潜在的危险类导入,上面的代码就会崩溃。。。所以我不知道这段代码说明了什么。