PHP 代碼瀏覽器檢查防 CC 攻擊

4,891 0

前幾天,這個小博客一直被群裡某大佬盯上攻擊。由於我開啟了 CDN,對方無法獲取我的源 IP,於是轉而對我的網站發起了大規模的 CC 攻擊,搞得我是措手不及。

由於攻擊來源的 IP 太多,手動拉黑幾乎不可能完成。剛好想起百度雲加速的智能防 CC 功能,它基於五秒盾的原理。我用 PHP 模擬了百度雲加速的防 CC 機制,寫了一個簡單的防護腳本,今天分享給大家。

PHP 防 CC 代碼

PHP
<?php
define('SYSTEM_ROOT', dirname(preg_replace('@\\(.*\\(.*$@', '', preg_replace('@\\(.*\\(.*$@', '', __FILE__))) . '/');
session_start();
date_default_timezone_set('Asia/Shanghai');
header('Content-Type: text/html; charset=UTF-8');

function getspider($useragent = '') {
    if (defined('CC_Defender') && CC_Defender == 2) return false;
    if (!$useragent) {
        $useragent = $_SERVER['HTTP_USER_AGENT'];
    }
    $useragent = strtolower($useragent);
    $spiders = [
        'baiduspider', 'googlebot', 'soso', 'bing', 'yahoo', 'sohu-search',
        'sogou', 'youdaobot', 'yodaobot', 'robozilla', 'msnbot', 'lycos',
        'ia_archiver', 'archive.org_bot', 'sitebot', 'mj12bot', 'gosospider',
        'gigabot', 'yrspider', 'jikespider', 'addsugarspiderbot', 'testspider',
        'etaospider', 'wangidspider', 'foxspider', 'docomo', 'yandexbot',
        'ezooms', 'sinaweibobot', 'catchbot', 'surveybot', 'dotbot', 'purebot',
        'ccbot', 'mlbot', 'adsbot-google', 'ahrefsbot', 'spbot', 'augustbot'
    ];
    foreach ($spiders as $spider) {
        if (strpos($useragent, $spider) !== false) return $spider;
    }
    return false;
}

if ($_GET['rand'] && $_SESSION['rand_session'] != $_GET['rand']) {
    header('Content-Type: text/html; charset=UTF-8');
    exit('<b>瀏覽器不支援 COOKIE 或訪問異常!</b>');
}

if (!$_SESSION['rand_session']) {
    if (!getspider()) {
        $rand_session = md5(uniqid() . rand(1, 1000));
        $_SESSION['rand_session'] = $rand_session;
        exit("<!DOCTYPE HTML>
<html>
<head>
<meta charset=\"UTF-8\"/>
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\" />
<title>安全檢查中...</title>
<script>
    var i = 5; 
    var intervalid; 
    intervalid = setInterval(\"fun()\", 1000); 
    function fun() { 
        if (i == 0) { 
            window.location.href = \"?{$_SERVER['QUERY_STRING']}&rand={$rand_session}\"; 
            clearInterval(intervalid); 
        } 
        document.getElementById(\"mes\").innerHTML = i; 
        i--; 
    } 
</script> 
<style>
html, body {width: 100%; height: 100%; margin: 0; padding: 0;}
body {background-color: #ffffff; font-family: Helvetica, Arial, sans-serif; font-size: 100%;}
h1 {font-size: 1.5em; color: #404040; text-align: center;}
p {font-size: 1em; color: #404040; text-align: center; margin: 10px 0 0 0;}
#spinner {margin: 0 auto 30px auto; display: block;}
.attribution {margin-top: 20px;}
</style>
</head>
<body>
<table width=\"100%\" height=\"100%\" cellpadding=\"20\">
<tr>
<td align=\"center\" valign=\"middle\">
<noscript><h2>請開啟瀏覽器的 JavaScript 功能並重新整理頁面</h2></noscript>
<h1><span>瀏覽器安全檢查中...</span></h1>
<p>該過程自動完成</p>
<p>請稍候,還剩 <span id=\"mes\">5</span> 秒</p>
</td></tr></table>
</body></html>");
    }
}
?>

將以上 PHP 代碼添加到網站頭部的 PHP 文件中(如 index.php 或其他主入口文件),即可啟用防護。這樣,只有通過安全驗證並獲得 COOKIE 的瀏覽器才能正常訪問你的網站。

注意事項

  1. 該方法僅適用於較小規模的攻擊(如普通 CC 攻擊)。
  2. 如果遇到大量分佈式肉雞攻擊(如 DDoS),此代碼可能無能為力,建議使用專業的抗 DDoS 服務。
  3. 遇到攻擊時,保持低調、冷靜處理,避免挑釁。

評論

(0)

暫無評論,來說兩句吧

發佈評論

© 2026 一紙忘憂. 保留所有權利.

一紙忘憂的個人網站,關於技術探索與日常生活,記錄 Web 開發、後端與 DevOps 實踐,分享軟體工具、數位體驗,以及程式碼之外的見聞與思考。