网站和其他网络服务(例如 Google App Engine 或 WordPress 等)如何安全地允许人们上传他们想要的任何代码,而不会定期受到用户代码的损害?我正在研究一个项目,该项目基本上使用 Python 中更复杂的“Eval()”实现来执行用户上传的代码。我正在考虑尝试安全地做到这一点,而不是托管代码,而是让开发人员托管代码,我可以像 api 一样访问它?或者可能必须全部批准(就像他们在应用商店中所做的那样)。
无论如何,只是换个说法,我怎样才能安全地托管和执行用户上传的代码?
网站和其他网络服务(例如 Google App Engine 或 WordPress 等)如何安全地允许人们上传他们想要的任何代码,而不会定期受到用户代码的损害?我正在研究一个项目,该项目基本上使用 Python 中更复杂的“Eval()”实现来执行用户上传的代码。我正在考虑尝试安全地做到这一点,而不是托管代码,而是让开发人员托管代码,我可以像 api 一样访问它?或者可能必须全部批准(就像他们在应用商店中所做的那样)。
无论如何,只是换个说法,我怎样才能安全地托管和执行用户上传的代码?
Python interåreter 过去将沙盒作为功能目标。然而,它对 Python 来说并不是很好。
剩下的就是 RestrictedPython(部署在 Plone 网站上):
http://pypi.python.org/pypi/RestrictedPython
它基本上是一个 eval() 在执行之前修改 Python AST。对少数行脚本有用,对实际应用程序开发无用。
但是,如果我是你,我不会尝试在虚拟机级别创建沙盒。相反,我会创建jailed / chrooted UNIX 进程,这些进程对所有内容(磁盘、网络等)具有只读访问权限,并且执行时间过长会导致终止超时。这几乎就是 App Engine 的工作方式。