• 技术文章 >后端开发 >php教程

    php防止CC攻击代码 php防止网页频繁刷新

    不言不言2018-06-02 14:11:53原创796
    这篇文章主要介绍了php防止CC攻击代码和php防止网页频繁刷新,网页快速恶意刷新,cc攻击利用代理服务器生成指向目标站点的合法请求,模拟多用户不停的对受害网站进行访问,感兴趣的小伙伴们可以研究一下

    网页快速恶意刷新,cc攻击就是攻击者利用代理服务器生成指向目标站点的合法请求,模拟多用户不停的对受害网站进行访问,特别是访问那些需要大量数据操作需要大量CUP时间的页面,最终导致目标网站服务器资源耗尽,一直到宕机崩溃,如此一来,造成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的连接直至就网络拥塞,正常的访问被中止。我们称之为CC攻击。尽管我们可以借助于一些防攻击的软件来实现,不过效果有时并不明显。

    下面我提供一段PHP的代码,可以起到一定的防CC攻击效果。
    主要功能:在3秒内连续刷新页面5次以上将指向本机 http://127.0.0.1
    只需将该代码放到需要防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攻击的多种方式,希望能帮助大家防止网页快速恶意刷新。

    相关推荐:

    ThinkPHP防止重复提交表单的方法

    PHP防止sql注入的方法讲解

    以上就是php防止CC攻击代码 php防止网页频繁刷新的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 网页 代码
    上一篇:PHP图形计数器程序显示网站用户浏览量 下一篇:深入理解PHP中mt_rand()随机数的安全
    PHP编程就业班

    相关文章推荐

    • PHP中的日期处理方法集锦_PHP教程• 在PHP中使用灵巧的体系结构_PHP教程• 抓取YAHOO股票报价的类_php技巧• Yii中创建自己的Widget实例_PHP• php短址转换实现方法_PHP

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网