1

所以我正在考虑构建一个CMS,我希望它被设计成插件可以轻松扩展它的功能(我也在研究钩子系统和语言设置)。

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

我正在设计具有如下结构的 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/ 中的文件,而不能访问它上面的文件?本质上,我想禁止插件访问它们自己目录之外的文件。

这一定很简单吧?

谢谢!

4

1 回答 1

0

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

于 2013-08-15T16:00:29.240 回答