Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/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 用户可以在web应用程序中创建自己的代码/公式的沙箱_Php_Symfony_Security - Fatal编程技术网

Php 用户可以在web应用程序中创建自己的代码/公式的沙箱

Php 用户可以在web应用程序中创建自己的代码/公式的沙箱,php,symfony,security,Php,Symfony,Security,正在寻找一些指导,为我指明正确的方向。我们的web服务是在Symfony/PHP中构建的(然而,这个问题可能有点平台无关) 首先让我解释一下我们当前的设置: 该数据库包含数千个数据集。每个数据集仅包含日期/值对,其中值始终为浮点或整数。示例(虚拟数据): 我们的服务结合了这些数据集,并应用(有时很复杂)公式根据数据计算“结果”。基本上是一个函数,它接收所需的日期和需要合并的数据源,然后进行一些计算并返回当天的“结果”。例如,根据上述数据集,结果可能是“预计在伦敦销售的啤酒瓶” 根据上述三个数据集

正在寻找一些指导,为我指明正确的方向。我们的web服务是在Symfony/PHP中构建的(然而,这个问题可能有点平台无关)

首先让我解释一下我们当前的设置:

该数据库包含数千个数据集。每个数据集仅包含日期/值对,其中值始终为浮点或整数。示例(虚拟数据):

我们的服务结合了这些数据集,并应用(有时很复杂)公式根据数据计算“结果”。基本上是一个函数,它接收所需的日期和需要合并的数据源,然后进行一些计算并返回当天的“结果”。例如,根据上述数据集,结果可能是“预计在伦敦销售的啤酒瓶”

根据上述三个数据集,预计在伦敦销售的啤酒瓶现在实际上是一个新的数据集。我们现在可以使用这个数据集来计算新的结果,比如“预期酒精销售总额”

问题:

我们希望让我们的用户能够编写自己的公式。我们的用户在一个基本编程技能普遍的利基市场工作。我们需要的是一个安全的沙箱环境,人们可以使用一种尚待确定的编程语言(或自定义语言?)来编写过程代码,从而允许:

  • 变量的使用
  • 应用一些基本的数学基础:加法,分心,乘法,除法
  • if/else块
  • 理想情况下,能够创建和操作阵列
  • 理想情况下,能够使用循环
创建一个用户可以选择数据集作为输入并键入代码的界面不是问题。我们正在寻找一些指导的实际问题:

  • 我们应该允许他们使用哪种编程语言(最好是一种性能快且功能不比上面列出的函数多的语言),还是我们应该创建自己的语法
  • 我们如何在现有symfony/php web环境中集成自定义代码,而不产生巨大的安全风险?在前端完全执行计算不是一个选项-我们需要以某种方式将公式的结果存储在服务器上
  • 我们如何安全地处理语法错误、零除法等,并确保用户除了所选语言的白名单功能外,没有其他任何功能

  • 任何关于实现此功能的最佳方法的想法都将受到高度赞赏,即使只是指向正确的方向也会有很大帮助!非常感谢

    我认为您的问题有很多可能的解决方案,选择“正确的解决方案”在很大程度上取决于用户的需求和体验

    我最近有一个Java项目,用户可以编写评分函数来评估对象列表的状态。经过一番搜索,我决定使用JavaNashorn引擎,因此使用Javascript作为编程语言。有一个名为PHP的替代方案集成了V8 Javascript引擎。我从来没用过这个,但是- 阅读文档-与Nashorn非常相似

    1。我们应该允许他们使用哪种编程语言

    我认为没有客观的理由选择X语言而不是Y语言。但是javascript对用户来说有一些优势。对我来说,Javascripts的功能方面是决定性的因素

    优点:

    • 您可以将PHP变量传递给javascript,反之亦然。对于数组和对象,这甚至是可能的

    • Javascript是一种非常流行的编程语言,我们的用户可能已经知道了

    • 您的用户可能会使用不同的编程范例来满足他们的需求(过程、功能、面向对象)

    • Javascript v8非常快,因为它能够及时编译为本机代码

    缺点:

    • 您需要安装PHP扩展v8js和v8JavaScript引擎库(libv8)
    2。我们如何在现有symfony/php web环境中集成自定义代码,而不产生巨大的安全风险?

    您可以使用此插件限制最大执行时间和最大内存消耗。javascript也在沙箱中运行。发件人:

    该扩展允许您以安全的方式执行Javascript代码 来自PHP的沙盒。执行的代码可以使用时间限制 限制和/或内存限制。这提供了执行的可能性 不可信的代码

    3。我们如何安全地处理语法错误、零除法等

    自述文件:

    如果JavaScript代码抛出(未捕获),会导致错误或 如果不编译,则会引发V8JsScriptException异常,除非 V8Js对象构造时,将report_uncaught_异常设置为FALSE


    我看不到函数白名单功能。但是考虑到它是在沙箱中运行的,我认为没有必要这样做?

    我认为有很多可能解决您的问题的方法,选择“正确的方法”在很大程度上取决于用户的需求和体验

    我最近有一个Java项目,用户可以编写评分函数来评估对象列表的状态。经过一番搜索,我决定使用JavaNashorn引擎,因此使用Javascript作为编程语言。有一个名为PHP的替代方案集成了V8 Javascript引擎。我从来没用过这个,但是- 阅读文档-与Nashorn非常相似

    1。我们应该允许他们使用哪种编程语言

    我认为没有客观的理由选择X语言而不是Y语言。但是javascript对用户来说有一些优势。对我来说,Javascripts func
    Date       | Temperature in London
    ----------------------------------
    10-07-2017 | 28
    11-07-2017 | 26
    
    
    Date       | Is Bank Holiday
    ----------------------------
    10-07-2017 | 1
    11-07-2017 | 0
    
    
    Date       | Population in London
    ---------------------------------
    10-07-2017 | 8788235
    11-07-2017 | 8789804