php防止CC攻击代码 php防止网页频繁刷新
网页快速恶意刷新,cc攻击就是攻击者利用代理服务器生成指向目标站点的合法请求,模拟多用户不停的对受害网站进行访问,特别是访问那些需要大量数据操作需要大量cup时间的页面,最终导致目标网站服务器资源耗尽,一直到宕机崩溃,如此一来,造成服务器资源的浪费,cpu长时间处于100%,永远都有处理不完的连接直至就网络拥塞,正常的访问被中止。我们称之为cc攻击。尽管我们可以借助于一些防攻击的软件来实现,不过效果有时并不明显。
下面我提供一段php的代码,可以起到一定的防cc攻击效果。
主要功能:在3秒内连续刷新页面5次以上将指向本机
只需将该代码放到需要防cc攻击的页面即可。
源码
<?php $timestampcc = time(); $cc_nowtime = $timestampcc; if(session_is_registered('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)<3){//3秒内刷新5次以上可能为cc攻击 if($cc_times>=5){ echo '刷新太快!'; exit; } }else{ $cc_times = 0; $_session['cc_lasttime'] = $cc_nowtime; $_session['cc_times'] = $cc_times; } ?>
下面是为大家整理的php防cc攻击的有效方法:
1.session记录
submit.php为发送页面,在这个页面上设置一个session变量,并作为隐藏域和表单一起发送到submitdeal.php页面,在服务器端把post上来的隐藏变量和服务器端记录的session变量进行对比,比如一样,则写入数据库并清除session,这样用户刷新页面,两个值不相等提示错误或跳转。
优点:不用用户输入验证码
缺点:表单容易被复制
2.验证码
原理和第一种一样,只是session数据不作为隐藏域提交,而是让用户填写,大多数网站都采用文字验证码和图片验证码,图片验证码安全性高。
3.ip绑定
提交数据后,先从ip表里检索客户端ip,如果有,并且没有过期,那么报错,否则写入数据库,然后再取客房端ip,把ip写入数据库。
4.cookie:客户提交后处理程序先检索客户端有没有设置cookie,如果有,则不重复提交;如果没有,则写数据,再写个cookie;
例:
用户无意义的频繁跳转、请求都会给服务器加重很多负担 其实 用cookie就可以防止这一点。
<?php error_reporting(0); //if($_cookie["ck"])die("刷新过快!"); if($_cookie["ck"])header("location:http://www.baidu.com");//这里如果用户刷新过快,给予终止php脚本或者直接302跳转 setcookie("ck","1",time()+3);//设定cookie存活时间3s echo "hello!"; ?>
方式一:
<?php session_start(); $k=$_get['k']; $t=$_get['t']; $allowtime = 1800;//防刷新时间 $ip = get_client_ip(); $allowt = md5($ip.$k.$t); if(!isset($_session[$allowt])) { $refresh = true; $_session[$allowt] = time(); }elseif(time() - $_session[$allowt]>$allowtime){ $refresh = true; $_session[$allowt] = time(); }else{ $refresh = false; } ?>
方式二:
<? session_start(); if(!emptyempty($_post[name])){ $data = $_post[name]; $tag = $_post[tag]; if($_session[status]==$tag){ echo $data; }else{ echo "不允许刷新!"; } } $v = mt_rand(1,10000); ?> <form method="post" name="magic" action="f5.php"><input type="hidden" name="tag" value="<?=$v?>"><input type=text name="name"><input type="submit" value="submit"> </form> <? echo $v; $_session[status] = $v; ?>
方式三:
<? session_start(); if(!emptyempty($_post[name])){ $data = $_post[name]; $tag = $_post[tag]; if($_session[status]==$tag){ echo $data; }else{ echo "不允许刷新!"; } } $v = mt_rand(1,10000); ?> <form method="post" name="magic" action="f5.php"><input type="hidden" name="tag" value="<?=$v?>"><input type=text name="name"><input type="submit" value="submit"> </form> <? echo $v; $_session[status] = $v; ?>
以上就是php防止cc攻击的多种方式,希望能帮助大家防止网页快速恶意刷新。
上一篇: 设计师升维:运用整合思维模式构建设计形态
下一篇: 聊一聊设计师成长的四个阶段