我开始开发一些东西(自托管 - 每个用户在服务器上安装它 - 可能是共享服务器),允许用户上传其他代码(插件)。
我担心的一个问题是插件更改了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扩展。
答案 0 :(得分:0)
我担心的一个问题是插件更改了Core文件。
将您的Core文件作为signed PHP Archive发送。
我试图限制插件访问文件或php函数。如果只允许插件使用Core类/方法,那就太好了。
这是一个非常具有挑战性的问题,远远超出了StackOverflow答案的范围。至少,您需要确保服务器引导命中您的框架(如果您使用签名的.phar而不是可变的.php文件,则可以正常运行。)
然而,除此之外,您无法阻止插件在标准库中调用PHP函数。另一种方法可能是构建一个模板引擎(例如像Twig),并且只允许使用您自己的特定于域的语言编写插件,该语言不能调用任意PHP函数,只能调用您提供的函数。