PHP教程:zblogphp简易防CC攻击代码

PHP教程:zblogphp简易防CC攻击代码-第1张-菜鸟博客

作为站长或者公司的网站的网管,什么最可怕?显然是网站受到的DDoS攻击。其中CC最为常见的的一种

在这里分享一个简易的php防cc代码,仅供学习参考

function sheli_cc(){
       session_start();
       $timestampcc = time();
       $cc_nowtime = $timestampcc;
       if(isset($_SESSION['cc_lasttime'])){$cc_lasttime = $_SESSION['cc_lasttime'];$cc_times = $_SESSION['cc_times']+1;$_SESSION['cc_times'] = $cc_times;
       }else{$cc_lasttime = $cc_nowtime;$cc_times = 1;$_SESSION['cc_times'] = $cc_times;$_SESSION['cc_lasttime'] = $cc_lasttime;} 
       if(($cc_nowtime-$cc_lasttime)<60){if($cc_times>=3){header(sprintf('Location:%s', 'http://127.0.0.1'));exit;}//60秒内刷新3次以上可能为cc攻击
       }else{$cc_times = 0;$_SESSION['cc_lasttime'] = $cc_nowtime;$_SESSION['cc_times'] = $cc_times;}
}
//或
function sheli_cc(){
        //代理IP直接退出
        empty($_SERVER['HTTP_VIA']) or exit('Access Denied');
        //防止快速刷新
        session_start();
        $seconds = '60'; //时间段[秒]
        $refresh = '3'; //刷新次数
        //设置监控变量
        $cur_time = time();
        if(isset($_SESSION['last_time'])){
                $_SESSION['refresh_times'] += 1;
        }else{
                $_SESSION['refresh_times'] = 1;
                $_SESSION['last_time'] = $cur_time;
        }
        //处理监控结果
        if($cur_time - $_SESSION['last_time'] < $seconds){
                if($_SESSION['refresh_times'] >= $refresh){
                        //跳转至攻击者服务器地址
                        header(sprintf('Location:%s', 'http://127.0.0.1'));
                        exit('Access Denied');
                }
        }else{
                $_SESSION['refresh_times'] = 0;
                $_SESSION['last_time'] = $cur_time;
        }
}
//或这个需开启redis
function filter_cc() {
        //时间间隔
        $TIME_SPAN = 3;
        //最大请求数
        $MAX_REQUEST = 50;
        //两参数组合起来就是:限制同一IP的客户在多少时间间隔内允许的最大请求数是多少。
        $this->load->model("tb_empty");  //这是redis类
        $key = "Filter:CC:";
        $ip = $this->get_client_ip();
        $keys = $key.$ip;
        $this->tb_empty->redis_incr($keys);
        if($this->tb_empty->redis_ttl($keys) == -1)
        {
            $this->tb_empty->redis_setTimeOut($keys,$TIME_SPAN);
        }
        if($this->tb_empty->redis_get($keys) > $MAX_REQUEST)
        {
            $http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';
            $uri = $http_type.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
            exit("<meta http-equiv=\"refresh\" content=\"3;url={$uri}\"> <label>loading...</label>");
        }
}

如果你也跟楼猪一样用的是zblog,那么复杂 上面其中一段添加至你的主题目录文件include.php

然后在你的主题模板template目录footer.php(任意地方)添加标签{sheli_cc()}即可

然而,你以为这样就没事了?

在这里推荐其他方法,如果你是宝塔用户,可以安装一个Fail2ban防爆破插件(简单暴力)。

还可以使用知道创宇抗D宝,功能集成了:抗D宝、加速乐、创宇盾和其它有利于SEO优化的功能,根据自己实际情况开启即可防御,推荐默认选项即可。

在这里就不多说废话了,又说我打广告

猜你喜欢

发表评论