PHP防CC攻击实现代码总结
发布时间:2022-02-11 09:05:32 所属栏目:PHP教程 来源:互联网
导读:CC攻击就是对方利用程序或一些代理对您的网站进行不间断的访问,造成您的网站处理不了而处于当机状态,下面我们来总结一些防CC攻击的php实例代码,各位朋友可参考. 例1,代码如下: //代理IP直接退出 emptyempty($_SERVER[HTTP_VIA]) or exit(Access Denied); //
CC攻击就是对方利用程序或一些代理对您的网站进行不间断的访问,造成您的网站处理不了而处于当机状态,下面我们来总结一些防CC攻击的php实例代码,各位朋友可参考. 例1,代码如下: //代理IP直接退出 emptyempty($_SERVER['HTTP_VIA']) or exit('Access Denied'); //防止快速刷新 session_start(); $seconds = '3'; //时间段[秒] $refresh = '5'; //刷新次数 //设置监控变量 $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'); } //开源代码Cuoxin.com }else{ $_SESSION['refresh_times'] = 0; $_SESSION['last_time'] = $cur_time; } 例二,代码如下: $P_S_T = $t_array[0] + $t_array[1]; $timestamp = time(); session_start(); $ll_nowtime = $timestamp ; if (session_is_registered('ll_lasttime')){ $ll_lasttime = $_SESSION['ll_lasttime']; $ll_times = $_SESSION['ll_times'] + 1; $_SESSION['ll_times'] = $ll_times; }else{ $ll_lasttime = $ll_nowtime; $ll_times = 1; $_SESSION['ll_times'] = $ll_times; $_SESSION['ll_lasttime'] = $ll_lasttime; } if (($ll_nowtime - $ll_lasttime)<3){ if ($ll_times>=5){ header(sprintf("Location: %s",'http://127.0.0.1')); exit; } }else{ $ll_times = 0; $_SESSION['ll_lasttime'] = $ll_nowtime; $_SESSION['ll_times'] = $ll_times; } 一个实例我自己亲测的,日志分析: [2011-04-16 03:03:13] [client 61.217.192.39] /index.php [2011-04-16 03:03:13] [client 61.217.192.39] /index.php [2011-04-16 03:03:13] [client 61.217.192.39] /index.php [2011-04-16 03:03:13] [client 61.217.192.39] /index.php [2011-04-16 03:03:12] [client 61.217.192.39] /index.php [2011-04-16 03:03:12] [client 61.217.192.39] /index.php [2011-04-16 03:03:12] [client 61.217.192.39] /index.php [2011-04-16 03:03:11] [client 61.217.192.39] /index.php [2011-04-16 03:03:11] [client 61.217.192.39] /index.php [2011-04-16 03:03:11] [client 61.217.192.39] /index.php [2011-04-16 03:03:10] [client 61.217.192.39] /index.php [2011-04-16 03:03:10] [client 61.217.192.39] /index.php 下面是PHP方法,将以下代码另存为php文件,然后首行include入你的common.php文件中,代码如下: <?php /* * 防CC攻击,不死版. * * 如果每秒内网站刷新次数超过2次,延迟5秒后访问。 */ $cc_min_nums = '1'; //次,刷新次数 $cc_url_time = '5'; //秒,延迟时间 //$cc_log = 'cc_log.txt'; //启用本行为记录日志 $cc_forward = 'http://localhost'; //释放到URL //-------------------------------------------- //返回URL $cc_uri = $_SERVER['REQUEST_URI']?$_SERVER['REQUEST_URI']:($_SERVER['PHP_SELF']?$_SERVER['PHP_SELF']:$_SERVER['SCRIPT_NAME']); $site_url = 'http://'.$_SERVER ['HTTP_HOST'].$cc_uri; //启用session if( !isset( $_SESSION ) ) session_start(); $_SESSION["visiter"] = true; if ($_SESSION["visiter"] <> true){ echo "<script>setTimeout("window.location.href ='$cc_forward';", 1);</script>"; //header("Location: ".$cc_forward); exit; } $timestamp = time(); $cc_nowtime = $timestamp ; 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; } //获取真实IP if (isset($_SERVER)){ $real_ip = $_SERVER['HTTP_X_FORWARDED_FOR']; }else{ $real_ip = getenv("HTTP_X_FORWARDED_FOR"); } //print_r($_SESSION); //释放IP if (($cc_nowtime - $cc_lasttime)<=0){ if ($cc_times>=$cc_min_nums){ if(!emptyempty($cc_log)) cc_log(get_ip(), $real_ip, $cc_log, $cc_uri); //产生log echo "Wait please, try again later!<script>setTimeout("window.location.href ='$site_url';", 5000);</script>"; //printf('您的刷新过快,请稍后。'); //header("Location: ".$cc_forward); exit; } }else{ $cc_times = 0; $_SESSION['cc_lasttime'] = $cc_nowtime; $_SESSION['cc_times'] = $cc_times; } //记录cc日志 function cc_log($client_ip, $real_ip, $cc_log, $cc_uri){ $temp_time = date("Y-m-d H:i:s", time() + 3600*8); $temp_result = "[".$temp_time."] [client ".$client_ip."] "; if($real_ip) $temp_result .= " [real ".$real_ip."] "; $temp_result .= $cc_uri . "rn"; $handle = fopen ("$cc_log", "rb"); $oldcontent = fread($handle,filesize("$cc_log")); fclose($handle); $newcontent = $temp_result . $oldcontent; $fhandle=fopen("$cc_log", "wb"); fwrite($fhandle,$newcontent,strlen($newcontent)); fclose($fhandle); } //获取在线IP function get_ip() { global $_C; if(emptyempty($_C['client_ip'])) { if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { $client_ip = getenv('HTTP_CLIENT_IP'); } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { $client_ip = getenv('HTTP_X_FORWARDED_FOR'); } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $client_ip = getenv('REMOTE_ADDR'); } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) { $client_ip = $_SERVER['REMOTE_ADDR']; } $_C['client_ip'] = $client_ip ? $client_ip : 'unknown'; } return $_C['client_ip']; } ?> 这样就可以基础工业防止了,但是如果更高级占的就没办法,大家可尝试使用相关硬件防火强来设置. (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |