首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 實作 CC 攻擊防禦與防刷新限流:Session 級防護範例

     編輯:PHP 相關知識

前言

CC 攻擊(Challenge Collapsar)屬應用層 DDoS,透過大量合法請求耗盡伺服器資源。本文提供輕量級 PHP 防護片段,結合 代理 IP 攔截 與 Session 級頻率限制,可直接置於入口檔案或通用引導檔,作為第一道防線(完整防護仍需 WAF、CDN、限流中介軟體配合)。

完整防護程式碼

<?php
/**
 * CC 攻擊與惡意刷新防護
 * 放置於 bootstrap.php 或所有入口檔最頂端
 */
declare(strict_types=1);

// 1. 代理 IP 直接拒絕(簡易特徵判斷)
if (!empty($_SERVER['HTTP_VIA']) || !empty($_SERVER['HTTP_X_FORWARDED_FOR']) || !empty($_SERVER['HTTP_PROXY_CONNECTION'])) {
    http_response_code(403);
    exit('Access Denied: Proxy Detected');
}

// 2. Session 頻率限制
session_start();

$windowSeconds = 3;   // 統計時間窗(秒)
$maxRequests   = 5;   // 窗口內最大請求數

$now = time();

// 初始化
if (!isset($_SESSION['rate_limit'])) {
    $_SESSION['rate_limit'] = [
        'count'     => 1,
        'window_start' => $now,
    ];
} else {
    $rl = &$_SESSION['rate_limit'];
    
    // 同一窗口內
    if ($now - $rl['window_start'] < $windowSeconds) {
        $rl['count']++;
        if ($rl['count'] > $maxRequests) {
            http_response_code(429);
            // 可導向靜態頁或記錄日誌
            exit('Access Denied: Rate Limit Exceeded');
        }
    } else {
        // 新窗口重置
        $rl['count'] = 1;
        $rl['window_start'] = $now;
    }
}

// 正常業務邏輯繼續...

關鍵參數調整建議

參數建議值說明
$windowSeconds1~10越小越嚴格,需配合業務特性(API 可設 1 秒,頁面 3~5 秒)
$maxRequests5~30正常使用者點擊頻率極低,機器人通常超過 10 req/s
Session 存儲Redis / Memcached多伺服器環境必須共享 Session,檔案式預設無法跨節點

進階強化方向

  1. Token Bucket / Leaky Bucket 演算法: 平滑流量突發,支援突發配額。
  2. IP 維度限流: 結合 $_SERVER['REMOTE_ADDR'],針對未登入用戶以 IP 計數,避免 Session 劫持繞過。
  3. 驗證碼挑戰: 觸發限流後回傳 429 + 圖形/行為驗證碼,通過後發放通行 Token。
  4. 日誌與告警: 記錄觸發限流的 IP、UA、URL、頻率,串接 ELK/Grafana 告警。
  5. 邊緣防護: Cloudflare / AWS Shield / Nginx limit_req_zone 在 PHP 層前攔截 90%+ 攻擊流量。

Nginx 級限流範例(推薦前置)

# http 區塊
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;

# server/location 區塊
location /api/ {
    limit_req zone=api_limit burst=20 nodelay;
    limit_req_status 429;
    proxy_pass https://php_upstream;
}

總結

PHP 層面的 Session 限流屬「最後一道防線」,適合快速部署、低流量站點。生產環境務必採用「邊緣 WAF + 反向代理限流 + 應用層 Token Bucket + 可觀測性」的多層防禦體系,才能有效化解 CC 攻擊。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved