让用户上传Python脚本以便执行

时间:2009-05-04 00:20:55

标签: python cgi

据我所知,让任何匿名用户上传任何类型的文件都是危险的,特别是如果它的代码。但是,我有一个想法让用户上传自定义AI脚本到我的网站。我将提供模板,以便用户可以在我用Python编写的在线网络游戏中与其他AI竞争。我要么需要一个解决方案来确保用户不会破坏任何其他文件或通过他们上传的脚本或客户端执行游戏的解决方案注入恶意代码。有什么建议? (我正在寻找一种适用于我的Python脚本的解决方案)

6 个答案:

答案 0 :(得分:8)

我与这个网站没有任何关联,我只是链接它,因为它试图实现你所获得的:蟒蛇的监狱。该网站为code pad

根据about页面,它在geordi下运行,并使用ptrace捕获所有sys调用。除了chroot之外,他们还在虚拟机上安装防火墙以禁止出站连接。

认为这是一个起点,但我必须在整个危险的事情上插话。自己要CYA。 :)

答案 1 :(得分:8)

使用PyPy可以创建一个python沙箱。沙箱是一个独立的,应该是安全的python环境,您可以在其中执行脚本。更多信息在这里

http://codespeak.net/pypy/dist/pypy/doc/sandbox.html

“从理论上讲,不可能做任何不好的事情或从这个提示中读取机器上的随机文件。”

“即使script.py来自某个随机不受信任的来源,也是安全的,例如,如果它是由HTTP服务器完成的。”

答案 2 :(得分:4)

除了其他安全措施外,您还可以合并人工审查代码。假设部分经验是审查其他成员的解决方案,并且每个人都是python开发人员,在一定数量的成员投票之前,不要允许激活新代码。您的用户不会批准恶意代码。

答案 3 :(得分:3)

允许他们编写客户端脚本,而不是服务器脚本。

答案 4 :(得分:1)

根据建议,PyPy可能是服务器端的一个不错的选择,但我会考虑让你的python后端提供定义良好的API和数据格式,并让用户在Javascript中实现AI和逻辑,这样它就可以在他们的浏览器。所以交互看起来像:对于每个匹配/转/等,以明确定义的格式将数据传递给浏览器,提供接收数据并可以实现逻辑的javascript模板,并提供可由客户端调用的Web API (浏览器)采取所需的行动。这样您就不必担心安全性或服务器电源。

答案 5 :(得分:0)

为用户提供广泛的API,并在上传时删除所有其他调用(例如import语句)。另外,删除与文件i / o有关的所有内容。

(你可能想要多次通过,以确保你没有遗漏任何东西。)