帝国CMS模板大全
www.admin99.cn
www.92cms.cn 帝国CMS模板下载站!,情怀,养站,二次开发!源码需求比较大的一站式会员下载,价更省!!!

PHP防CC攻击实现代码总结 - php高级应用

PHP防CC攻击实现代码总结

CC攻击就是对方利用程序或一些代理对您的网站进行不间断的访问,造成您的网站处理不了而处于当机状态,下面我们来总结一些防CC攻击的php实例代码,各位朋友可参考.

例1,代码如下:

//代理IP直接退出   
empty empty ( $_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' );  
    }  //开源代码phpfensi.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 (! empty empty ( $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 ( empty empty ( $_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' ]; 

?> 

这样就可以基础工业防止了,但是如果更高级占的就没办法,大家可尝试使用相关硬件防火强来设置.

赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《PHP防CC攻击实现代码总结 - php高级应用》
文章链接:https://www.admin99.cn/8149
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
QQ站长交流群:953950264

登录

找回密码

注册