这次带来一个防御CC小功能;来自谷歌搜索,小改了下;配合Redis数据库(需放开6379端口)使用
以下代码复制粘贴在网站入口PHP处。CC攻击停止后会尽快解除验证码,回到正常状态
//防CC配置
$IPmax = 30; //开启验证码条件 值>=php最大进程数,适当设置更大会降低验证码触发条件,但会增大502错误几率(php挂起)
$IPfor = 60; //周期 这个值基本不用动
$IPban = 60; //扔入黑名单 60秒内访问超过60次即拉黑IP
$banTime = 3600*24; //黑名单时长 扔小黑屋时长,这种代理IP放一天感觉都少了 = =!
$ip = ip();
//连接本地的 Redis 服务
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
//拦截黑名单
if($redis->exists($ip.'ban')){
exit('您被关进了小黑屋,么么哒!如有疑问,请联系站长');
}
//扔黑名单检测
if($redis->get($ip.'ok') >= $IPban){
$redis->setex($ip.'ban', $banTime, '1');
}
if($redis->exists($ip.'ok')){
$redis->incrby($ip.'ok',1); //记录IP 自增1
}else{
$redis->setex($ip.'ok',$IPfor,1);
}
//按需开启防CC 小黑屋IP不会触发该条件,所以当一段时间以后就会解除验证码。除非攻击者换一批代理继续攻击。如此往复
if(count($redis->keys("*ok")) > $IPmax){
//验证
if($_COOKIE['key'] == ''){
if($_GET['cc']){
$key = md5($ip.$_GET['cc']);
setcookie("key",$key);
}
}
//拦截代码
if($_COOKIE['key'] && $_COOKIE['cc'] && $_COOKIE['key'] == md5($ip.$_COOKIE['cc'])){
//通过
}else{
if($_GET['cc']){
$key = md5($ip.$_GET['cc']);
setcookie("key",$key);
}else{
$cc = rand(1000,9999);
setcookie("cc",$cc);
//这里只是简单的构造了一下验证码,有能力可以自己更改的更安全和完美。
echo '
请输入:'.$cc.' :
访问异常,请输入验证码。
';
}
exit();
}
}
function ip() {
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
$ip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
$ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
$ip = getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
$ip = $_SERVER['REMOTE_ADDR'];
}
$res = preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : '';
return $res;
}
这个页面 实在地 打开世界。保持方向!
我珍视, 这里分享真实经验。你的网站 就是 正是这样的。干得好。
阅读你的博客, 我看出, 各国更亲近。感谢 旅行气氛。
我经常阅读 关于旅行的资源。太棒了学到新知识。
吸引人的 旅游杂志, 加油 充满灵感。感谢!
关注更新, 我看出, 旅行带来灵感。无限感谢 旅行气氛。
我热爱, 充满真情实感。你的项目 就是 最好的例子。请继续。
我总是关注 度假栏目。超级棒找到这样的文章。
吸引人的 在线导览, 坚持下去 保持热情。十分感谢.
我关注你们的更新 旅行页面。增长见识掌握出行细节。