0

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

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

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

所以基本上:

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

3 回答 3

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

如果这项任务落在我的腿上,我会研究 pythons virtualenv以便我有一个隔离的环境。那么显然我会确定运行上传程序的脚本的权限。

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

  1. 嗯,是的,cron 有效。

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

于 2013-02-16T00:14:13.577 回答
0

如果您专门针对 PHP,则可以使用 runkit 扩展 - 专门为运行用户提供的 PHP 代码而创建:

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

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

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

于 2013-02-16T00:19:29.440 回答
0

Q1。我可以使用什么语言?

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

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

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

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

A3。很少发明轮子是个好主意。您可以这样做,但有理由怀疑这是必要的和/或可取的。

我个人的建议是把 JavaScript 作为脚本语言——因为它非常普遍,周围有大量的工具和文档。所以你可能想看看Node.js这个沙盒模型来在服务器端运行它。

于 2013-02-25T22:10:37.317 回答