SAE上使用PHP实现防止CC攻击

CC攻击简介

CC = Challenge Collapsar,意为“挑战黑洞”,其前身名为Fatboy攻击,是利用不断对网站发送连接请求致使形成拒绝服务的目的。攻击针对论坛等需要查询大量数据库的程序特别有效。

开始解决

其实先百度的,百度PHP防止CC攻击,有参考代码,看了几个,其实没有屁用。因为他们用的SESSION来记录,可是SESSION和客户端COOKIE有关,我攻击的时候还提交COOKIE干嘛?用户难道手动点击去攻击你?显然用这种方式识别客户端不太合适,没办法,只能自己写段代码解决了。

解决办法

直接上代码。这里使用了SAE的Memcache服务来记录数据。

/*fuck cc*/
$mmc = new \Memcache;
$ret = $mmc->connect();
if ($ret ) {
    $ip = $_SERVER["REMOTE_ADDR"];//获取请求IP
    $data = $mmc->get($ip);
    if($data){
        if(!$data['access']){//判断访问权限
            // echo "WTF!?";
            exit();//直接断开连接
        }
        $data['count'] += 1;
        //下面判断,1s内访问50次的客户端判断为攻击者
        if($data['count']>50 && ((time()-$data['time'])<2)){
            $data['access'] = false;
            $mmc->set($ip,$data,0,3600);//禁止访问3600s也就是1h
        }
        $mmc->set($ip,$data,0,60);
    }else{//记录该IP第一次访问的时间
        $data['count'] = 1;
        $data['time'] = time();
        $data['access'] = true;
        $mmc->set($ip,$data,0,60);
    }
}
/*end fuck cc*/

我这里实现是根据客户端的IP来识别。

优点是能有效防止单个IP的CC攻击。

缺点是针对大量内网机器使用同一个公网IP的情况会造成误判,不过可以通过适当的调整判断攻击的门限值来避免这种情况。(调整代码中次数阈值和时间差阈值)

再者说对于我的小博客来说已经满足我的使用场景了,不需要考虑共用公网IP的情况了。

本博客亲测有效!只能防CC,流量攻击当然没用!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值