对用户生成的Python代码运行检查

时间:2014-03-04 15:04:58

标签: python security

我正在尝试创建一个用户可以用Python或Octave编程的网站。与电子学习网站Udacity非常相似。用户在网站上输入他的代码,然后将其发送到处理代码并将响应返回给用户的网络服务器。我得到了它的工作,但我认为这是非常不安全的,因为我没有对代码运行任何检查。我读到here Udacity将代码发送到沙盒集群并对其运行自己的测试以查看它是否通过。

所以我的问题是:如果我不对此代码运行检查会发生什么?我的整个网站是否可以被聪明的恶意用户删除?我该怎么测试这段代码以确保“没有什么不好的事情发生”?

1 个答案:

答案 0 :(得分:4)

这取决于一些事情:

  • 您是否以限制用户身份运行?
  • 您是否有最大允许运行时间?
  • 您是否允许网络访问或完全限制它?

以root用户身份登录的恶意代码可能会删除您的服务器内容。恶意的非根代码代码找到了提升并仍然有害的方法。 非root代码可以forkbomb或找到其他方式来使用所有可用的服务器资源。 不受限制的代码可能会启动对Web资源的拒绝服务攻击。它可能会破坏您的内部网络并将详细信息发布给恶意个人,以提供进一步信息以进行更协调的攻击。

使用文件和子进程访问 - 它可以写出x86或C代码,汇编/编译/链接并运行它。


至于保护它 - 将此代码作为系统上的最低权限用户运行,或者更好地在专用VM /容器内运行。

你可以找到一种在受限python中运行它的方法,它有一组非常有限的核心库和内置函数 - 禁用网络,子处理,文件打开,线程。

对于任何建议的方法 - 您需要调查它们的含义和弱点。

最后一个选择是调查“睡衣” - 它在浏览器中运行python并转换为JS,如果它可以完全在浏览器中运行。这意味着用户代码和可能的结果验证将在他们的浏览器中运行 - 而不是您的服务器。