在http://www.thinkindrupal.com/node/5971看到一种通过实现hook_watchdog()自动封禁IP的实现方案。其主要目的是:当用户过于频繁的发起站点访问时,例如每分钟30次watchdog,自动封锁该IP地址。
具体代码如下:
function upower_core_watchdog(array $log_entry) {
//一分钟之内,30次watchdog,自动封IP
$created_start = time() - 60;
$ip = substr($log_entry['ip'], 0, 128);
$sql = "SELECT count(wid) FROM {watchdog} WHERE uid=:uid AND hostname=:hostname AND timestamp > :timestamp";
$ip_total = db_query($sql, array(':uid' => 0, ':hostname' => $ip, ':timestamp' => $created_start))->fetchField();
if($ip_total >= 30){
db_insert('blocked_ips')
->fields(array('ip' => $ip))
->execute();
}
}
然而,这种方法存在以下两点问题:
1)如果使用syslog,而不启用dblog,则watchdog表中将不再存储信息
2)蜘蛛的IP地址应不再此列
著作权归作者所有。商业转载请联系本站作者获得授权,非商业转载请注明出处 ZZKOOK。
评论
感谢作者,心疼自己。。。
好人好事需要大家的鼓励!
?!!
谢谢ZZKOOK的好人们!
矮油,不错嘛