【发布时间】:2011-04-23 00:34:24
【问题描述】:
我正在构建一个 CMS,而主页 (index.php) 是由 CMS 目录中的许多小文件构建的。例如,结构可能是这样的:
index.php
menu/admin/content.php
config.php
requests.php
menu/tools/content.php
config.php
requests.php
menu/users/content.php
config.php
requests.php
当我访问根目录中的index.php 时,我会根据$_GET 参数得到不同的结果。例如,当我访问index.php?section=tools 时,索引文件会从menu/tools/ 文件夹中加载content、cofnig 和requests 文件。
现在解决问题。 index.php 页面本身仅供登录用户访问,但出于安全原因,我想禁止通过任何其他方式访问 menu 文件夹中的所有内容,而不是通过 php 的包含函数。
为了演示可能发生的情况:如果我想删除某些内容,我使用index.php?section=tools&delete=5,在menu/tools/requests.php 文件中,我会检查是否设置了$_GET['delete'],然后从数据库中删除ID 5。现在的问题是,如果有人知道实际结构,他可以像这样访问requests.php 文件:site.com/admin/menu/tools/requests.php?delete=5,然后以这种方式入侵该网站。
有没有办法防止这种可能的攻击?拒绝访问菜单文件夹中的文件,但仍然允许从我的 index.php 文件访问它们? Htaccess 也许?我真的不想对“菜单”文件夹中的每个文件进行检查(如果设置了会话/cookie),尽管这是一个可能的解决方案。
【问题讨论】:
-
index.php?section=tools&delete=5 本身就是一个坏主意。我现在找不到参考资料,但我读到过一个案例,说整个网站被一个仁慈的机器人破坏了,因为每个项目都有一个“删除”链接。请改用 POST 请求。
标签: php session .htaccess cookies