我正在构建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
时,索引文件会从content
文件夹中加载cofnig
,requests
和menu/tools/
个文件。
现在问题。 index.php
页面本身只对登录用户可访问,但出于安全考虑,我想禁用menu
文件夹中的所有内容,而不是通过php的include函数进行访问。
要演示可能发生的情况:如果我想删除某些内容,请使用index.php?section=tools&delete=5
,并在menu/tools/requests.php
文件中,检查是否设置了$_GET['delete']
,然后删除了ID 5来自DB。现在的问题是,如果有人知道实际的结构,他可以像requests.php
一样访问site.com/admin/menu/tools/requests.php?delete=5
文件,并以这种方式破解网站。
有没有办法防止这种可能的攻击?要拒绝访问菜单文件夹中的文件,但仍然可以从我的index.php文件中访问它们? Htaccess可能吗?我真的不想对“菜单”文件夹中的每个文件进行检查(如果设置了会话/ cookie),尽管这可能是一种解决方案。
答案 0 :(得分:3)
在您要拒绝访问的文件夹中创建一个.htaccess,其中包含以下内容:
deny from all
最好的办法是将文件夹放在网络根目录之外。
答案 1 :(得分:1)
最好的方法是将menu
文件夹移动到Web服务器文档根目录之外的某个位置。这样,没有网址映射到menu/tools/requests.php
,您唯一的安全问题就是您在index.php
答案 2 :(得分:0)
首先,如果有人手动添加GET参数并“破解”该网站则存在问题。在脚本中,您应该验证尝试执行这些操作的用户的身份验证,如果他们经过身份验证,则应该没有问题。我不认为任何人会在通过GET param删除某些内容时会出现问题,因为他们可以在界面上自行完成。
你提出的方法有解决方案,但他们每个人都有自己的顾虑......
CodeIgniter通过设置变量,然后在每个脚本的头部
来工作if ( ! defined('BASEPATH')) exit('No direct script access allowed');
您还可以检查$ _SERVER ['SCRIPT_FILENAME'],$ _SERVER ['SCRIPT_NAME']或$ _SERVER ['PHP_SELF']以查看其index.php,否则退出。