使用PHP编写文件的安全隐患

时间:2010-04-15 01:31:13

标签: php security caching

我目前正在尝试使用PHP创建一个CMS,纯粹是出于教育的兴趣。我希望管理员能够创建内容,这些内容将以纯HTML格式解析并保存在服务器存储上,以避免执行PHP脚本所产生的开销。不幸的是,我只能想到几种方法:

  • 在CMS应该要写入文件的每个目录上设置写入权限。这听起来是个糟糕的主意。
  • 在单个cached目录上设置写入权限。然后,PHP脚本可以在请求时includefopen/fread/echo来自cached目录中文件的内容。这可能是以Mediawiki式的方式进行的:index.php?page=xyz之类的东西可以在运行时读取并回显来自cached/xyz.html的内容。但是,我需要确保$_GET['page']的理智,以防止index.php?page=http://www.bad-site.org/malicious-script.js等令人讨厌的变化。

我个人对第二个想法并不太兴奋,但第一个想法听起来很不安全。有人可以建议一个很好的方法来完成这项工作吗?

编辑:我不赞成从数据库中获取数据。我想要从数据库中获取数据的唯一时间是内容被缓存。其次,我无权访问memcached或任何PHP加速器。

3 个答案:

答案 0 :(得分:2)

由于您正在构建CMS,您必须接受如果用户想要对访问者做恶事,他们很可能会这样做。无论您在何处存储内容,都是如此。

如果公共站点都是静态内容,那么让CMS直接写入文件没有任何问题。但是,您需要将Web服务器配置为不在CMS可写入的任何目录中执行任何操作。

即使您不想每次都访问数据库,也可以设置缓存以最大限度地减少数据库读取。 Zend_Cache非常适用于此,并且可以非常有效地用作独立组件。

答案 1 :(得分:1)

您应该将您的页面放在数据库中并使用参数化SQL查询检索它们。

答案 2 :(得分:0)

我会使用第二个选项但是修改它以便使用mod_rewrite而不是自定义的php函数来检索文件。