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;
}
}
// 正常業務邏輯繼續...
| 參數 | 建議值 | 說明 |
|---|---|---|
$windowSeconds | 1~10 | 越小越嚴格,需配合業務特性(API 可設 1 秒,頁面 3~5 秒) |
$maxRequests | 5~30 | 正常使用者點擊頻率極低,機器人通常超過 10 req/s |
| Session 存儲 | Redis / Memcached | 多伺服器環境必須共享 Session,檔案式預設無法跨節點 |
$_SERVER['REMOTE_ADDR'],針對未登入用戶以 IP 計數,避免 Session 劫持繞過。limit_req_zone 在 PHP 層前攔截 90%+ 攻擊流量。# 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 攻擊。