PHP:使用第三方代码防止核心更改

PHP:使用第三方代码防止核心更改,php,security,plugins,Php,Security,Plugins,我开始开发一些东西(自托管——每个用户都将其安装在自己的服务器上——可能是共享服务器),允许用户上传其他人的代码(插件) 我担心的一个问题是插件改变了核心文件 应用程序的流程如下所示: index.php > Core() > (do stuff) > load/execute plugins <- may have code to replace a Core file > (do stuff) > exit

我开始开发一些东西(自托管——每个用户都将其安装在自己的服务器上——可能是共享服务器),允许用户上传其他人的代码(插件)

我担心的一个问题是插件改变了核心文件

应用程序的流程如下所示:

index.php 
  > Core() 
    > (do stuff) 
    > load/execute plugins <- may have code to replace a Core file 
    > (do stuff) 
    > exit
index.php
>核心()
>(做事)
>加载/执行插件(做一些事情)
>出口
我试图限制插件对文件或php函数的访问。 如果插件只允许使用核心类/方法,那就太好了

因为它是自托管的(可能由非开发人员使用),所以我无法控制系统apache.conf或php.ini。我只能创建.htaccess文件

我想到的解决方案:

~在*.php文件上使用token_get_all()(在插件安装期间),并检查是否使用了chgrp、chmod、chown、copy等函数。但这并不理想,我肯定会错过一些函数

其他解决方案(来自评论):

x更改文件夹权限-可以通过php完成,但插件和核心也可以,不能自行更新

编辑php.ini以防止使用函数-不能。无法访问php.ini

x正在使用软件包-无法。这是一个php扩展

我担心的一个问题是插件改变了核心文件

将您的核心文件作为一个组件发送

我试图限制插件对文件或php函数的访问。如果插件只允许使用核心类/方法,那就太好了

这是一个非常具有挑战性的问题,远远超出了StackOverflow答案的范围。至少,您需要确保服务器引导符合您的框架(如果您使用的是带符号的.phar文件而不是可变的.php文件,那么这会很好地工作)


但是,除此之外,您无法阻止插件调用标准库中的PHP函数。另一种方法可能是构建一个模板引擎(例如like),只允许使用您自己的领域特定语言编写插件,不能调用任意PHP函数,只能调用您提供的函数。

服务器权限。将核心目录设置为仅读取和执行,甚至由所有者执行。编辑php.ini以防止使用危险的函数,如exec()和system()。有一个PHP包限制了系统功能的使用位置和使用人。我对你的建议有一些疑问/问题:如果我设置了权限:如何更新核心,如果无法写入文件?插件可以更改权限吗?(使用chmod)无法编辑php.ini,因为它是自托管的,不能更改apache/php.ini设置,只有.htaccess,但“禁用函数”在.htaccess中不起作用,而且nginx支持将是限制系统函数使用的很酷的php包-什么包?这看起来像我正在寻找的,但它不能是一个扩展这个项目将是一个zip文件-像Wordpress的东西-所以我没有多少可以控制的更新核心使用一个系统用户,将有权写入给定的目录。请记住*nix系统权限是全局组用户。某些用户可以执行其他用户无法执行的操作。对于php.ini,如果它是自托管的,您应该可以访问所有内容。实际上,系统函数disable是一个php.ini设置。让我看看我是否能找到这个包……这里是:我对自托管的意思是,每个用户都在自己的系统中安装它,大多数时候他们不是开发人员,并且使用共享托管帐户。正因为如此,我实际上无法控制用户的权限、使用的用户或php.ini访问权限。您建议的包是一个php扩展,我不能使用。很抱歉,如果我不清楚“自托管”啊,那就有点清楚了。根据您关于“每个用户在自己的系统中安装”的陈述,这意味着没有办法阻止用户更改核心文件。由于用户可以访问机器和其中的文件,恐怕没有办法100%防止更改。我没有想过使用phar归档,它看起来是适合我想要的分发类型的一个很好的解决方案。twig示例我想到了类似的东西,核心读取/执行的自定义文件扩展名或类似的东西。