PHP:使用第三方代码

时间:2017-11-02 13:27:11

标签: php security plugins

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

我担心的一个问题是插件更改了Core文件。

应用程序的流程如下:

index.php 
  > Core() 
    > (do stuff) 
    > load/execute plugins <- may have code to replace a Core file 
    > (do stuff) 
    > exit

我正在尝试限制插件访问文件 php函数。 如果只允许插件使用Core类/方法,那就太好了。

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

我的解决方案:

〜在* .php文件上使用token_get_all()(在插件安装期间)并检查是否有任何使用 chgrp chmod chown , copy 等等。但这并不理想,我相信我会错过一些功能。

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

x更改文件夹权限 - 可以通过php完成,但插件和Core也无法自行更新

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

x使用 snuffleupagus 包 - 不能。这是一个php扩展。

1 个答案:

答案 0 :(得分:0)

  

我担心的一个问题是插件更改了Core文件。

将您的Core文件作为signed PHP Archive发送。

  

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

这是一个非常具有挑战性的问题,远远超出了StackOverflow答案的范围。至少,您需要确保服务器引导命中您的框架(如果您使用签名的.phar而不是可变的.php文件,则可以正常运行。)

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