Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何安全地允许用户定期提交代码运行?_Php_Cron_Sandbox_Sanitization - Fatal编程技术网

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

Php 如何安全地允许用户定期提交代码运行?,php,cron,sandbox,sanitization,Php,Cron,Sandbox,Sanitization,基本上,我需要允许用户提交代码,以便在服务器端定期运行 用户应该提交简单的脚本,我将运行他们的代码服务器端,以确定谁提出了更好的解决方案。我创建了一个简单的提交表单,代码存储在SQL数据库中 我显然担心安全,但我也不知道该用哪种语言。我需要一种具有简单语法的脚本语言,让我限制用户可以做的事情的数量(我只需要让他们定义变量、创建函数、使用循环以及一些数组和代数函数)。甚至可能创建一个具有简单语法的伪语言 所以基本上: 我能用什么语言 如何定期运行用户代码?(只知道cronjobs,但我不知道它们是

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

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

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

所以基本上:

  • 我能用什么语言
  • 如何定期运行用户代码?(只知道cronjobs,但我不知道它们是否允许长时间执行)
  • 创建一种伪语言是个好主意吗?如果是,请给我指出正确的方向
  • 什么语言:嗯,你可以使用任何语言,只要确保你有最低限度的权限。不过,像Ruby或Python这样的脚本语言会更容易
  • 如果这个任务落在我的腿上,我会研究蟒蛇,这样我就有了一个孤立的环境。很明显,我会确定运行上传程序的脚本的权限

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

  • 嗯,是的,克朗工作

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


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

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


    第一季度。我能用什么语言

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

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

    A2。cron工作可能是一条出路。它不关心执行时间。但是,这意味着您的任务是确保仅在上一次运行已完成时才重新启动作业(假设您希望它这样做)

    第三季度。创建一种伪语言是个好主意吗?如果是,请给我指出正确的方向

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


    我的个人目标是将JavaScript作为脚本语言——因为它非常广泛,有大量的工具和文档。因此,您可能需要查看并在服务器端运行它

    我会说要么有某种沙箱(chrooted服务器),这样就不会有什么真正的结果。。或者解析/解释代码(如果代码不复杂),请看这里您应该指定情况的上下文-在某些情况下,最好创建受其命令限制的自己的脚本语言。在不同的情况下,我会使用一些虚拟环境。嘿,我试图详细说明我想让用户做什么,语言应该非常有限,我只希望他们能够定义变量,做数学,比较,循环,定义函数,并允许一些函数处理数组。