如何安全地允许用户定期提交代码?

时间:2013-02-16 00:08:12

标签: php cron sandbox sanitization

基本上我需要允许用户提交代码以便在服务器端定期运行。

用户应该提交简单的脚本,我将运行他们的代码服务器端来确定谁想出了更好的解决方案。我创建了一个简单的提交表单,代码存储在SQL数据库中。

我显然担心安全,但我也不知道使用哪种语言。我需要一个简单的脚本语言,让我限制用户可以做的事情(我只需要让他们定义变量,创建函数,使用循环和一些数组和代数函数)。甚至可能用简单的语法创建一个伪语言。

基本上是这样的:

  1. 我可以使用哪种语言?
  2. 如何定期运行用户代码? (只知道cronjobs,但我不知道他们是否允许长时间执行)
  3. 创建伪语言会是个好主意吗?如果是,请指出我正确的方向

3 个答案:

答案 0 :(得分:1)

  1. 什么语言:嗯,您可以使用任何语言,只需确保您拥有最低权限。像Ruby或Python这样的脚本语言会更容易。
  2. 如果这项任务落在了我的腿上,我会调查蟒蛇virtualenv,这样我就有了一个孤立的环境。那么显然我会确定运行上传程序的脚本的权限。

    这也意味着您可以为使用此服务的每个用户设置python环境。

    1. 好吧,cron工作。

    2. 确实,但是答案的范围并不适合这里。但谷歌DSL或领域特定语言,你一定会找到一些教程。

答案 1 :(得分:0)

如果你专门针对PHP,你可以使用runkit扩展 - 专门用于运行用户提供的PHP代码:

http://www.php.net/manual/en/intro.runkit.php

还有一个较新的runkit项目可用(尽管你必须手动编译):

https://github.com/zenovich/runkit/

答案 2 :(得分:0)

Q1。我可以用什么语言?

A1。几乎任何。因为编译器会增加系统的复杂性,所以最好使用解释(或JIT编译)语言。

Q2。如何定期运行用户代码? (只知道cronjobs,但我不知道他们是否允许长时间执行)

A2。 cron工作可能是要走的路。它不关心执行时间。但是,这意味着确保只在先前的运行完成后才重新启动作业(假设这是您希望它执行的操作),这是您的工作。

Q3。创建一个伪语言会是个好主意吗?如果是,请指出我正确的方向

A3。发明轮子很少是一个好主意。你可以做到这一点,但有合理的怀疑,这是必要和/或可取的。

我的个人指针将转向JavaScript作为脚本语言 - 因为它非常普遍,有大量的工具和文档。因此,您可能希望查看Node.jsthis sandboxing model以在服务器端运行它。

相关问题