当前位置:  开发笔记 > 编程语言 > 正文

在GAE中的Python中,限制执行不受信任代码的风险的最佳方法是什么?

如何解决《在GAE中的Python中,限制执行不受信任代码的风险的最佳方法是什么?》经验,为你挑选了1个好方法。

我想让学生为一些简单的python问题提交python代码解决方案.我的应用程序将在GAE中运行.如何限制sumios的源代码的风险?我意识到这是一个难题,我已经阅读了相关的Stackoverflow和其他帖子.我很好奇,如果在GAE环境中适当的限制使得更容易限制不受信任的代码可能造成的损害.是否可以简单地扫描提交的代码以获取一些受限制的关键字(执行,导入等),然后确保代码仅运行不到一段固定的时间,或者即使在resticted GAE环境?例如:

# Import and execute untrusted code in GAE
untrustedCode = """#Untrusted code from students."""

class TestSpace(object):pass
  testspace = TestSpace()

try:
  #Check the untrusted code somehow and throw and exception.
except:
   print "Code attempted to import or access network"


try:
    # exec code in a new namespace (Thanks Alex Martelli)
    # limit runtime somehow
    exec untrustedCode in vars(testspace)
except:
    print "Code took more than x seconds to run"

Alex Martell.. 5

@mjv的笑脸评论实际上是正确的:确保提交者被识别并与相关代码相关联(可能会将其发送到任务队列),并记录由个人提交的任何诊断.

除此之外,您确实可以准备一个更具限制性的测试空间(感谢您的确认;-)包括一个特殊的" 内置 ",其中包含您希望学生能够使用和重新定义的所有内容__import__.这样,再加一个令牌传递到禁止高管,EVAL,进口,__subclasses__,__bases__,__mro__,...,让你更接近.然而,在GAE环境中完全安全的沙箱是一个真正的挑战,除非您可以将允许学生的一小部分语言列入白名单.

所以我建议采用分层方法:学生上传和执行代码的沙盒GAE应用程序基本上没有持久层需要担心; 相反,它通过向另一个应用程序发送urlfetch请求来"持久化",该应用程序从不运行任何不受信任的代码,并且能够非常严格地审查每个请求.使用白名单的默认拒绝仍然是圣杯,但有了这样一个额外的安全层,你可能能够承担黑名单的默认接受......



1> Alex Martell..:

@mjv的笑脸评论实际上是正确的:确保提交者被识别并与相关代码相关联(可能会将其发送到任务队列),并记录由个人提交的任何诊断.

除此之外,您确实可以准备一个更具限制性的测试空间(感谢您的确认;-)包括一个特殊的" 内置 ",其中包含您希望学生能够使用和重新定义的所有内容__import__.这样,再加一个令牌传递到禁止高管,EVAL,进口,__subclasses__,__bases__,__mro__,...,让你更接近.然而,在GAE环境中完全安全的沙箱是一个真正的挑战,除非您可以将允许学生的一小部分语言列入白名单.

所以我建议采用分层方法:学生上传和执行代码的沙盒GAE应用程序基本上没有持久层需要担心; 相反,它通过向另一个应用程序发送urlfetch请求来"持久化",该应用程序从不运行任何不受信任的代码,并且能够非常严格地审查每个请求.使用白名单的默认拒绝仍然是圣杯,但有了这样一个额外的安全层,你可能能够承担黑名单的默认接受......

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有