網站受到CC攻擊, 可以試試這個方法。
如果大家有對防CC攻擊更好的主意,歡迎留言,我們一起學習,謝謝!
if (isset($_SERVER)){
$realip = $_SERVER[HTTP_X_FORWARDED_FOR];
}
else
{
$realip = getenv("HTTP_X_FORWARDED_FOR");
}
if($realip""){
$remoteip=$_SERVER['REMOTE_ADDR'];
log_ip($remoteip,$realip);
}
function log_ip($remote_ip,$real_ip)
{
$temp_time = date("y-m-d G:i:s");
$temp_result = $temp_time." ".$real_ip." ".$remote_ip."
";
if(!$fhandle=fopen("cc_log.txt","a+")){
print "error";
exit;
}
fwrite($fhandle,$temp_result);
fclose($fhandle);
}
?>
此段代碼作用:
將代理訪問的真實IP記錄到日志中,以便排查分析。
以下是cc_log.txt的內容(此代碼生產是因我通過CC攻擊軟件攻擊生產的)
Time Real_ip Remote_ip
09-09-05 13:50:47 122.144.131.72 60.248.212.230
09-09-05 13:50:47 122.144.131.72 60.248.212.230
09-09-05 13:50:47 122.144.131.72 60.248.212.230
09-09-05 13:50:48 122.144.131.72 60.248.212.230
09-09-05 13:50:48 122.144.131.72 60.248.212.230
09-09-05 13:50:48 122.144.131.72 60.248.212.230
09-09-05 13:50:49 122.144.131.72 60.248.212.230
09-09-05 13:50:49 122.144.131.72 219.146.172.91
09-09-05 13:50:49 122.144.131.72 219.146.172.91
09-09-05 13:50:49 122.144.131.72 219.146.172.91
09-09-05 13:50:49 122.144.131.72 219.146.172.91
09-09-05 13:50:49 122.144.131.72 219.146.172.91
09-09-05 13:50:49 122.144.131.72 60.248.212.230
09-09-05 13:50:49 122.144.131.72 60.248.212.230
09-09-05 13:50:50 122.144.131.72 219.146.172.91
09-09-05 13:50:50 122.144.131.72 219.146.172.91
09-09-05 13:50:50 122.144.131.72 219.146.172.91
09-09-05 13:50:50 122.144.131.72 219.146.172.91
09-09-05 13:50:50 122.144.131.72 219.146.172.91
09-09-05 13:50:51 122.144.131.72 60.248.212.230
在僅僅有4秒的時間內,就從真實IP 122.144.131.72 以代理IP(60.248.212.230,219.146.172.91)來訪問我這臺服務器,可見這臺真實客戶端
是有問題的,這時,我們應該用防火墻(iptables)禁止掉這些真實IP,以使他們的請求,在入口就Deny掉。
<?php
session_start();
$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;
}
if (($cc_nowtime - $cc_lasttime)<5){
if ($cc_times>=10){
header(sprintf("Location: %s",'http://127.0.0.1'));
exit;
}
}else{
$cc_times = 0;
$_SESSION['cc_lasttime'] = $cc_nowtime;
$_SESSION['cc_times'] = $cc_times;
}
?>
這段代碼的作用:
同一會話,如果在5秒鐘內,刷新了10次就將響應指向到本地服務(http://127.0.0.1)
個人認為,第一段代碼可以與應用一起發布,并定期對cc_log.txt進行分析,以便保護服務。而第二段代碼,在第一段代碼近期出現過多代理請求,此時可以將此段代碼放入到應用中,起到一定的防CC攻擊(因為會話過多也會消耗服務器資源的,大家應當靈活應用)。當然 ,如果有硬防是更好的。不過,我曾在網上看到硬防看起后,會造成部分蜘蛛無法正常抓取,不過,大家可以通過http日志,將蜘蛛ip整理出來,交給相關的技術人員,以使其IP放入硬防的白名單中。