所以我正在考虑构建一个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 /中的文件,而且上面没有任何内容?基本上,我想禁止插件访问自己目录之外的文件。
这一定很简单,对吧?
谢谢!
答案 0 :(得分:0)
请考虑此插件最终将在cms进程中运行,因此恶意插件autor甚至可以从进程全局范围中获取数据。您的cms很可能在某些时候包含config.php,这样做意味着设置现在在全局范围内,并且可以被任何代码读取。您可以通过将设置存储在函数中来避免这种情况,例如。您可以通过询问函数的返回值来访问此设置,并在函数调用上发明一些锁定机制。