2013-02-16 31 views
0

基本上我需要让用户提交代码以便定期运行服务器端。如何安全地允许用户提交代码以定期运行?

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

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

所以基本上:

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

我会说要么有某种沙箱(chrooted服务器),所以没有什么真的走出来..或解析/解释代码,如果它不去复杂的东西 – xblitz 2013-02-16 00:12:49

+0

看看这里 http://stackoverflow.com/questions/4091887 /如何编写简单编程语言 – Sedz 2013-02-16 00:13:21

+0

您应该指定情境的上下文 - 在某些情况下,最好创建受其命令限制的自己的脚本语言。在不同的情况下,我会使用一些虚拟环境。 – 2013-02-16 00:14:57

回答

1
  1. 什么语言:嗯,你可以用任何语言,只要确保你有最小的权限。但是,像Ruby或Python这样的脚本语言会更容易。

如果这个任务会落在我的腿上我会看着蟒蛇virtualenv,这样我就有一个孤立的环境。那么显然我会确定运行上传程序的脚本的权限。

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

  1. 好吧,克朗的作品。

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

0

Q1。我可以使用哪种语言?

A1。几乎任何。因为编译器会增加系统的复杂性,所以解释(或JIT编译)的语言将是可取的。 Q2302。我如何定期运行用户代码? (只知道cronjobs,但我不知道他们是否会允许很长的执行时间)

A2。 cron工作可能是最好的选择。它不关心执行时间。然而,这意味着您的工作是确保您只在上一次运行结束时重新开始工作(假设您希望这样做)

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

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

我的个人指针会以JavaScript作为脚本语言 - 因为它非常普遍,所以有大量的工具和文档。所以你可能想看看Node.jsthis sandboxing model来运行它在服务器端。

相关问题