如果遇到了恶意的IP访问,我们通常会手动的将其封禁。阻止这个IP用户的继续访问。恶意用户很多。
在后台,手动封禁IP的办法:
导航到admin/config/people/ip-blocking,在这里输入要封禁的IP,点击添加即可。
如果有很多这样的用户,怎么办,可以采用代码的形式:
db_insert('blocked_ips')
->fields(array('ip' => $ip))
->execute();
一个比较好的办法,是根据访问日志,进行判断:
/**
* Implements hook_watchdog().
*/
function mymodule_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 >= 10){
db_insert('blocked_ips')
->fields(array('ip' => $ip))
->execute();
}
}
对于一些IP地址,如果存在数据库里面的话,比较耗费资源,可以考虑在settings.php文件里面,通过设置变量:
$conf['blocked_ips'] = array(
'123.123.123.123',
);