PHP站防止cc攻擊腳本

遇到問題:
昨天網站突然打不開,以為是php環境出了問題,各種排除問題,最終發現是80端口出了故障,于是想到很可能是被同行攻擊了,通過 “netstat -ano” 命令發現是慢性的CC攻擊,我的云服務器配置比較低,CPU消耗高達100%,服務器80端口資源被占用,最終導致網站直接崩潰。
解決思路:
1、第一個方法是:使用網站安全狗的CC防護功能,但安全狗容易把正常訪問的ip也屏蔽,很不利于網站用戶的訪問。而且網站安全狗在處理大量訪問數據時,也一樣占用很大的CPU。
2、第二個方法是:把網站的訪問端口改成88,然后通過IP安全策略封殺掉80端口,這樣確實是能百分百有效的防護攻擊,但用戶都是用80端口訪問的,突然改用80的話,就會無形中丟失很多用戶。
3、第三個方法是:找機房技術人員在第一道防火墻添加了80端口的安全策略,技術人員調試了很多次,終于可以無視任何CC攻擊了,但為了安全保障,因此在代碼里多加了個防CC攻擊的功能,代碼如下:
在indx.php入口文件中添加以下代碼:

<?php
//防CC攻擊
sheli_cc();
function sheli_cc(){
//代理IP直接退出
empty($_SERVER['HTTP_VIA']) or exit('Access Denied');
//防止快速刷新
session_start();
$seconds = '60'; //時間段[秒]
$refresh = '12'; //刷新次數
//設置監控變量
$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('請求頻率太快,稍候'.$seconds.'秒后再訪問!');
}
}else{
$_SESSION['refresh_times'] = 0;
$_SESSION['last_time'] = $cur_time;
}
}
?>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容