ホームページ >バックエンド開発 >PHPチュートリアル >PHP CC 攻撃対策実装コードの概要_PHP チュートリアル

PHP CC 攻撃対策実装コードの概要_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:11:14781ブラウズ

CC 攻撃とは、相手がプログラムまたは一部のエージェントを使用してあなたの Web サイトに継続的にアクセスし、Web サイトが処理できなくなり、クラッシュした状態になることを意味します。以下に CC 攻撃を防ぐための PHP サンプル コードをまとめます。それに。

例1

コードは次のとおりです
コードは次のとおりです コードをコピー

//プロキシ IP を直接終了します
empty($_SERVER['HTTP_VIA']) または exit('アクセスが拒否されました'); //高速リフレッシュを防止します
セッション開始(); $秒 = '3' //期間[秒]
; $refresh = '5' //リフレッシュ回数
; //監視変数を設定します
$cur_time = 時間(); if(isset($_SESSION['last_time'])){
$_SESSION['refresh_times'] += 1; }その他{
$_SESSION['refresh_times'] = 1; $_SESSION['last_time'] = $cur_time
}
//プロセス監視結果
if($cur_time - $_SESSION['last_time'] < $秒){
If($_SESSION['refresh_times'] >= $refresh){
//攻撃者のサーバーアドレスにジャンプします
header(sprintf('場所:%s', 'http://127.0.0.1')); exit('アクセスが拒否されました'); }
}その他{
$_SESSION['refresh_times'] = 0; $_SESSION['last_time'] = $cur_time
}




例 2


コードをコピー

$P_S_T = $t_array[0] + $t_array[1]; $timestamp = time();セッション開始(); $ll_nowtime = $タイムスタンプ ; if (session_is_registered('ll_lasttime')){ $ll_times = $_SESSION['ll_times'] + 1; $_SESSION['ll_times'] = $ll_times; }その他{ $ll_lasttime = $ll_nowtime $ll_times = 1; $_SESSION['ll_times'] = $ll_times; $_SESSION['ll_lasttime'] = $ll_lasttime
$ll_lasttime = $_SESSION['ll_lasttime']
}

if (($ll_nowtime - $ll_lasttime) if ($ll_times>=5){

header(sprintf("場所: %s",'http://127.0.0.1')); 出る

}
}その他{
$ll_times = 0; $_SESSION['ll_lasttime'] = $ll_nowtime
$_SESSION['ll_times'] = $ll_times; }



私が個人的にテストした例

ログ分析

[2011-04-16 03:03:13] [クライアント 61.217.192.39] /index.php
[2011-04-16 03:03:13] [クライアント 61.217.192.39] /index.php
[2011-04-16 03:03:13] [クライアント 61.217.192.39] /index.php
[2011-04-16 03:03:13] [クライアント 61.217.192.39] /index.php
[2011-04-16 03:03:12] [クライアント 61.217.192.39] /index.php
[2011-04-16 03:03:12] [クライアント 61.217.192.39] /index.php
[2011-04-16 03:03:12] [クライアント 61.217.192.39] /index.php
[2011-04-16 03:03:11] [クライアント 61.217.192.39] /index.php
[2011-04-16 03:03:11] [クライアント 61.217.192.39] /index.php
[2011-04-16 03:03:11] [クライアント 61.217.192.39] /index.php
[2011-04-16 03:03:10] [クライアント 61.217.192.39] /index.php
[2011-04-16 03:03:10] [クライアント 61.217.192.39] /index.php

以下は PHP の方法です。次のコードを php ファイルとして保存し、最初の行を common.php ファイルに含めます。

コードは次のとおりです コードをコピー

/*
* 反 CC 攻撃は死ぬほど憂鬱になります、不滅のバージョン。
*
※1秒間に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;

//セッションを有効にする
if( !isset( $_SESSION ) ) session_start();
$_SESSION["訪問者"] = true;
if ($_SESSION["訪問者"] <> true){
echo "<script>setTimeout("window.location.href ='$cc_forward';", 1);</script>";
//header("場所: ".$cc_forward);
終了します;
}

$タイムスタンプ = 時間(); $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;
}その他{
$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'];
}その他{
$real_ip = getenv("HTTP_X_FORWARDED_FOR");
}

//print_r($_SESSION);

//IPを解放する

if (($cc_nowtime - $cc_lasttime) if ($cc_times>=$cc_min_nums){
if(!empty($cc_log)) cc_log(get_ip(), $real_ip, $cc_log, $cc_uri) // ログを生成します
echo "お待ちください。後でもう一度お試しください!<script>setTimeout("window.location.href ='$site_url';", 5000);</script>";
//printf('更新が速すぎます。お待ちください。');
//header("場所: ".$cc_forward);
終了します;
}
}その他{
$cc_times = 0;
$_SESSION['cc_lasttime'] = $cc_nowtime;
$_SESSION['cc_times'] = $cc_times;
}

//记录cc日志
関数 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_ip."] ";   
 if($real_ip) $temp_result .= " [real ".$real_ip."] ";
 $temp_result .= $cc_uri 。 「ん」;
 
 $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
関数 get_ip() {
 グローバル $_C;
 
 if(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 : '不明';
 }
 return $_C['client_ip'];
}
?>

これは基本的なプロセスで防止できますが、より高いレベルで採用されている場合は、関連するハードウェアの防火機能を使用して設置することが一般的です。

http://www.bkjia.com/PHPjc/629601.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/629601.html技術記事 CC 攻撃とは、方利用程序またはいくつかの代理人が您の Web サイトに対して不断の接続を行うこと、造成された Web サイトの処理不了のため、当机状態にある、下面我们来永结ある CC 攻撃の防御です...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。