搜索
系统检测到您的用户名不符合规范:

禁止指定IP访问网站

浏览:7784 发布日期:2014年04月29日 分类:功能实现 关键字: 禁止IP 网站安全
添加禁止IP库,通过修改顶级类来禁止库中存在的IP访问网站,就是俗称的封IP
最近分析网站错误日志,竟然发现有大量高频次出现的IP不间断地在扫描网站,诸如:
[ 2014年04月28日T21:55:26+08:00 ] 223.208.36.53 /dede/
ERR: 无法加载控制器:Dede
[ 2014年04月28日T09:01:24+08:00 ] 115.29.196.101 /wwwroot.rar
ERR: 无法加载控制器:Wwwroot.rar
[ 2014年04月28日T09:01:25+08:00 ] 115.29.196.101 /wwwroot.zip
ERR: 无法加载控制器:Wwwroot.zip
[ 2014年04月28日T09:01:25+08:00 ] 115.29.196.101 /wwwroot.7z
ERR: 无法加载控制器:Wwwroot.7z
[ 2014年04月28日T09:01:25+08:00 ] 115.29.196.101 /bak.zip
ERR: 无法加载控制器:Bak.zip
[ 2014年04月28日T09:01:25+08:00 ] 115.29.196.101 /bak.rar
ERR: 无法加载控制器:Bak.rar
[ 2014年04月28日T09:01:25+08:00 ] 115.29.196.101 /bak.7z
ERR: 无法加载控制器:Bak.7z

这些记录清晰地表明有人使用程序在批量尝试搜罗网站后台地址或备份文件,看着很不舒服,虽然程序明显拒绝了请求。

于是萌发了添加禁止IP的功能,把这些IP统统禁止访问网站。

整理思路,觉得可以从顶级类着手,于是找到框架的顶级Controller类,在__construct()方法中增加以下代码: $IP = get_client_ip();
$iplist = M('iplist')->field('ip')->select();
for($i=0;$i<count($iplist);$i++){
$list[$i] = long2ip($iplist[$i]['ip']);
}
if(in_array($IP,$list)){
exit('You don\'t have permission to access!');
}
该代码从数据库中读取限制IP列表,然后用访客IP去判断是否存在数据表中,若存在,则报错,否则不做任何操作。
当然,在顶级类中添加这样的代码或许会对性能有所影响,没关系,直接在各分组Controller中增加__construct()方法,把上面代码写进去也是一样的。不过这样就麻烦些,有多少个控制器就要写多少个。
注意,__construct()方法不能乱用,若在控制器中写,开头必须加上parent::__construct();否则要报错!

其他要做的:
在后台开发功能,管理员可以添加禁止IP,也可以删除。需要十分注意的是,IP一定要从错误日志中提取确定是非法访问的,不要把搜索引擎的IP给禁止了哈!
收藏
_syntax_error
积分:571 等级:LV2
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /