编写具有有限系统访问权限的PHP插件系统

时间:2012-12-15 18:02:27

标签: php security plugins architecture filesystem-access

所以我正在考虑构建一个CMS,我希望它能够被设计为插件可以轻松扩展其功能(我正在处理钩子系统和语言设置)。 / p>

这是一个棘手的部分:我不是单独打包的CMS,而是试图为许多网站制作一种主机(例如mycms.com/your-site)。

我正在使用如下结构设计MySQL数据库:

pages
 - id
 - slug
 - title
 - content
 - site // The site id
sites
 - id
 - path // e.g. your-site
 - password // hash

然后我会在文件结构中存储这样的插件:

plugins/
  42/   // Site id
    hello-world/   // plugin name
      hello-world.php
      functions.php
      css/   // ...

当然,这里存在严重的安全问题。假设插件作者编码hello-world.php,如下所示:

<?php
 include '../../../core/config.inc.php';
 echo $config['mysql']['password']; // Now they have my server's database password!
?>

我如何规避这样的事情?我如何控制它,以便hello-world.php只能访问目录hello-world /中的文件,而且上面没有任何内容?基本上,我想禁止插件访问自己目录之外的文件。

这一定很简单,对吧?

谢谢!

1 个答案:

答案 0 :(得分:0)

请考虑此插件最终将在cms进程中运行,因此恶意插件autor甚至可以从进程全局范围中获取数据。您的cms很可能在某些时候包含config.php,这样做意味着设置现在在全局范围内,并且可以被任何代码读取。您可以通过将设置存储在函数中来避免这种情况,例如。您可以通过询问函数的返回值来访问此设置,并在函数调用上发明一些锁定机制。