在Django中安全地执行可能不安全的代码?

2024-09-27 00:14:26 发布

您现在位置:Python中文网/ 问答频道 /正文

目前,我正在处理一个项目中的函数,该函数要求我加载存储在联机数据库中的代码。代码应该适度可信,但不能完全可信。你知道吗

我们目前在一个单独的不明显的表中使用md5字段和,以确保我们正在执行的代码没有被更改,但是我们也希望用pysandbox对代码进行沙盒处理(也接受更好的建议)。当我们不得不使用django模型从数据库中获取信息时,问题就来了,因为当我们尝试接触模型时,pysandbox总是例外。你知道吗

安全执行者:

for hash in HashedChecksum.objects.all():
    if code_md5hash == hash.data:
        sandbox = Sandbox(SandboxConfig('stdout'))
        config.allowModule(contacts.models, Suppliers)
        namespace = {'query_dict': query_dict}
        sandbox.execute(code, locals=namespace)
        print namespace
    else:
        assert False

要执行的代码:

print "code in sandbox"
try:
    import contacts.models
    print "hey"
    print contacts.models.Supplier.objects.all()  #line that excepts
except:
    print "Excepted"
print "Ended Execution"

异常输出示例:

try:
    import jmsdirectory.contacts.models
    print jmsdirectory.contacts.models.Supplier.objects.all()
except Exception as e:
    print e

异常输出:

5.5
SafeModule 'jmsdirectory' has no attribute 'contacts'
5.6
{'e': AttributeError("SafeModule 'jmsdirectory' has no attribute 'contacts'",), 'company': u'D5202F00-A8C7-11E1-B68A-00219B15530E', 'jmsdirectory': <SafeModule 'jmsdirectory' from 'C:\\Joinerysoft\\Development\\joinerysoft-directory\\jmsdirectory\\..\\jmsdirectory\\__init__.pyc'>, 'contact': u'D53D7B00-A8C7-11E1-A34B-00219B15530E', 'address': u'D53368E1-A8C7-11E1-AF74-00219B15530E', 'type': u'stays'}
run_code: 6
[08/Jun/2012 15:53:01] "POST /transfer/server/ HTTP/1.0" 200 129

Tags: 函数代码数据库objectsmodelscodeallnamespace

热门问题