当前位置:首页 > 免费源码

PHP限制访问频率,简单防止CC攻击

游戏科技网2026年09月14日 23:13免费源码10
描述:介绍:由于自己使用API经常被频繁请求,还偶尔被CC攻击,找到一套防止非正常高频率请求和防止一般CC攻击的PHP源码。优势:简单易用,无论你懂不懂PHP开发,只要会复制粘贴就行。Memcached内存缓存技术,高性能,高并发。精准无误,0误封。能防护QPS10000以内的CC攻击,看机器配置,有可能…

PHP限制访问频率,简单防止CC攻击

介绍:

由于自己使用API经常被频繁请求,还偶尔被CC攻击,找到一套防止非正常高频率请求和防止一般CC攻击的PHP源码。

优势:

  • 简单易用,无论你懂不懂PHP开发,只要会复制粘贴就行。
  • Memcached内存缓存技术,高性能,高并发。
  • 精准无误,0误封。
  • 能防护QPS10000以内的CC攻击,看机器配置,有可能更高。
  • 支持范围较广,直接你网站支持PHP就行。
  • 源码简单,可自行修改,可以套自己喜欢的前端模板主题。

要求:

  • PHP版本 ≥ 7.2
  • PHP需安装Memcached扩展
  • Memcached ≥1.6

使用方法:

以下开源代码添加到你网站核心文件中,相当于你网站任何页面都会引用的一个文件。类似于:config.php
或者根据你的程序逻辑添加到需要防CC的PHP文件头部即可。

源码:

<span class="php"><span class="hljs-meta"><?php</span>
<span class="hljs-comment">/**
* 防止频繁请求,防范CC攻击,支持上万并发
* 原创作者:小伟
* 转载请保留版权,谢谢!
*/</span>
ini_set(<span class="hljs-string">"display_errors"</span>, <span class="hljs-string">"Off"</span>);
error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
extension_loaded(<span class="hljs-string"><a target="_blank" href="https://123vo.cn/tag/781.html" >memcached</a></span>) <span class="hljs-keyword">or</span> <span class="hljs-keyword">die</span>(<span class="hljs-string">memcached扩展未安装!</span>);
$logPath = $_SERVER[<span class="hljs-string">DOCUMENT_ROOT</span>] . <span class="hljs-string">/waf/waf.log</span>; <span class="hljs-comment">//日志记录文件保存路径,$_SERVER[DOCUMENT_ROOT]是网站根目录</span>
$fileht = $_SERVER[<span class="hljs-string">DOCUMENT_ROOT</span>] . <span class="hljs-string">/waf/ban.log</span>; <span class="hljs-comment">//被拉黑IP记录文件保存路径</span>
<span class="hljs-keyword">if</span> (!file_exists($logPath)) {
@mkdir($_SERVER[<span class="hljs-string">DOCUMENT_ROOT</span>] . <span class="hljs-string">/waf/</span>, <span class="hljs-number">0777</span>, <span class="hljs-keyword">true</span>);
@file_put_contents($logPath, <span class="hljs-string"></span>);
@file_put_contents($fileht, <span class="hljs-string"></span>);
}
$allowtime = <span class="hljs-number">2</span>; <span class="hljs-comment">//防刷新时间(秒)</span>
$allownum = <span class="hljs-number">5</span>; <span class="hljs-comment">//防刷新次数(比如2秒5次,超过就警告)</span>
$allowRefresh = <span class="hljs-number">10</span>; <span class="hljs-comment">//在此警告次数之后拉黑IP</span>
$bantime = <span class="hljs-number">600</span>; <span class="hljs-comment">//封禁时间,超时自动解封(秒)</span>
$ip = $_SERVER[<span class="hljs-string">HTTP_X_FORWARDED_FOR</span>] ? $_SERVER[<span class="hljs-string">HTTP_X_FORWARDED_FOR</span>] : $_SERVER[<span class="hljs-string">REMOTE_ADDR</span>];
$uri = $_SERVER[<span class="hljs-string">PHP_SELF</span>];
$cache = <span class="hljs-keyword">new</span> Memcached();
$cache->addServer(<span class="hljs-string">127.0.0.1</span>, <span class="hljs-string">11211</span>) <span class="hljs-keyword">or</span> <span class="hljs-keyword">die</span>(<span class="hljs-string">memcached连接失败!</span>);
$inban = $cache->get(<span class="hljs-string">waf-ban-</span> . $ip);
<span class="hljs-keyword">if</span> ($inban) {
header(<span class="hljs-string">"HTTP/1.1 403 Forbidden"</span>);
<span class="hljs-keyword">exit</span>(<span class="hljs-string"><h1>403 Forbidden 非法访问</h1>
<p>你的请求似乎不符合常理,已被服务器防火墙拦截,如有疑问请联系管理员QQ:XXXXXX</br>如果你在开发测试过程中超频被封IP,请等待</span> . ($bantime / <span class="hljs-number">60</span>) . <span class="hljs-string">分钟后自动解封</br>你的IP:</span> . $ip . <span class="hljs-string"></p></span>);
}
$wafarr = $cache->get(<span class="hljs-string">waf-</span> . $ip);
<span class="hljs-keyword">if</span> (!$wafarr) {
$wafarr = [
<span class="hljs-string">path</span> => $uri,
<span class="hljs-string">time</span> => time() + $allowtime,
<span class="hljs-string">sum</span> => <span class="hljs-number">1</span>,
];
$cache->set(<span class="hljs-string">waf-</span> . $ip, $wafarr, time() + $allowtime);
} <span class="hljs-keyword">else</span> {
<span class="hljs-keyword">if</span> ($wafarr[<span class="hljs-string">sum</span>] > $allownum) {
$wafsum_arr = $cache->get(<span class="hljs-string">waf-sum-</span> . $ip);
<span class="hljs-keyword">if</span> (!$wafsum_arr) {
$wafsum_arr = [
<span class="hljs-string">sum</span> => <span class="hljs-number">1</span>,
];
$cache->set(<span class="hljs-string">waf-sum-</span> . $ip, $wafsum_arr, time() + $bantime);
} <span class="hljs-keyword">else</span> {
<span class="hljs-keyword">if</span> ($wafsum_arr[<span class="hljs-string">sum</span>] > $allowRefresh) {
$cache->set(<span class="hljs-string">waf-ban-</span> . $ip, <span class="hljs-number">1</span>, time() + $bantime);
file_put_contents($fileht, $ip . <span class="hljs-string">"n"</span>, FILE_APPEND);
} <span class="hljs-keyword">else</span> {
$wafsum_arr[<span class="hljs-string">sum</span>]++;
$cache->set(<span class="hljs-string">waf-sum-</span> . $ip, $wafsum_arr, time() + $bantime);
}
}
file_put_contents($logPath, $ip . <span class="hljs-string">--</span> . date(<span class="hljs-string">Y-m-d H:i:s</span>, time()) . <span class="hljs-string">--</span> . $uri . <span class="hljs-string">"n"</span>, FILE_APPEND);
header(<span class="hljs-string">"HTTP/1.1 403 Forbidden"</span>);
<span class="hljs-keyword">exit</span>(<span class="hljs-string">"请求频率QPS超过限制,请酌情访问,多次提醒后会封禁IP!"</span>);
} <span class="hljs-keyword">else</span> {
$wafarr[<span class="hljs-string">sum</span>]++;
$cache->set(<span class="hljs-string">waf-</span> . $ip, $wafarr, $wafarr[<span class="hljs-string">time</span>]);
}
}</span>
<span class="php"><span class="hljs-meta"><?php</span>
<span class="hljs-comment">/**
* 防止频繁请求,防范CC攻击,支持上万并发
* 原创作者:小伟
* 转载请保留版权,谢谢!
*/</span>
ini_set(<span class="hljs-string">"display_errors"</span>, <span class="hljs-string">"Off"</span>);
error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
extension_loaded(<span class="hljs-string"><a target="_blank" href="https://123vo.cn/tag/781.html" >memcached</a></span>) <span class="hljs-keyword">or</span> <span class="hljs-keyword">die</span>(<span class="hljs-string">memcached扩展未安装!</span>);
    $logPath = $_SERVER[<span class="hljs-string">DOCUMENT_ROOT</span>] . <span class="hljs-string">/waf/waf.log</span>; <span class="hljs-comment">//日志记录文件保存路径,$_SERVER[DOCUMENT_ROOT]是网站根目录</span>
    $fileht = $_SERVER[<span class="hljs-string">DOCUMENT_ROOT</span>] . <span class="hljs-string">/waf/ban.log</span>; <span class="hljs-comment">//被拉黑IP记录文件保存路径</span>
<span class="hljs-keyword">if</span> (!file_exists($logPath)) {
    @mkdir($_SERVER[<span class="hljs-string">DOCUMENT_ROOT</span>] . <span class="hljs-string">/waf/</span>, <span class="hljs-number">0777</span>, <span class="hljs-keyword">true</span>);
    @file_put_contents($logPath, <span class="hljs-string"></span>);
    @file_put_contents($fileht, <span class="hljs-string"></span>);
}
    $allowtime = <span class="hljs-number">2</span>; <span class="hljs-comment">//防刷新时间(秒)</span>
    $allownum = <span class="hljs-number">5</span>; <span class="hljs-comment">//防刷新次数(比如2秒5次,超过就警告)</span>
    $allowRefresh = <span class="hljs-number">10</span>; <span class="hljs-comment">//在此警告次数之后拉黑IP</span>
    $bantime = <span class="hljs-number">600</span>; <span class="hljs-comment">//封禁时间,超时自动解封(秒)</span>
    $ip = $_SERVER[<span class="hljs-string">HTTP_X_FORWARDED_FOR</span>] ? $_SERVER[<span class="hljs-string">HTTP_X_FORWARDED_FOR</span>] : $_SERVER[<span class="hljs-string">REMOTE_ADDR</span>];
    $uri = $_SERVER[<span class="hljs-string">PHP_SELF</span>];
    $cache = <span class="hljs-keyword">new</span> Memcached();
    $cache->addServer(<span class="hljs-string">127.0.0.1</span>, <span class="hljs-string">11211</span>) <span class="hljs-keyword">or</span> <span class="hljs-keyword">die</span>(<span class="hljs-string">memcached连接失败!</span>);
    $inban = $cache->get(<span class="hljs-string">waf-ban-</span> . $ip);
<span class="hljs-keyword">if</span> ($inban) {
    header(<span class="hljs-string">"HTTP/1.1 403 Forbidden"</span>);
    <span class="hljs-keyword">exit</span>(<span class="hljs-string"><h1>403 Forbidden 非法访问</h1>
    <p>你的请求似乎不符合常理,已被服务器防火墙拦截,如有疑问请联系管理员QQ:XXXXXX</br>如果你在开发测试过程中超频被封IP,请等待</span> . ($bantime / <span class="hljs-number">60</span>) . <span class="hljs-string">分钟后自动解封</br>你的IP:</span> . $ip . <span class="hljs-string"></p></span>);
}
    $wafarr = $cache->get(<span class="hljs-string">waf-</span> . $ip);
<span class="hljs-keyword">if</span> (!$wafarr) {
    $wafarr = [
        <span class="hljs-string">path</span> => $uri,
        <span class="hljs-string">time</span> => time() + $allowtime,
        <span class="hljs-string">sum</span> => <span class="hljs-number">1</span>,
    ];
    $cache->set(<span class="hljs-string">waf-</span> . $ip, $wafarr, time() + $allowtime);
} <span class="hljs-keyword">else</span> {
    <span class="hljs-keyword">if</span> ($wafarr[<span class="hljs-string">sum</span>] > $allownum) {
        $wafsum_arr = $cache->get(<span class="hljs-string">waf-sum-</span> . $ip);
        <span class="hljs-keyword">if</span> (!$wafsum_arr) {
            $wafsum_arr = [
            <span class="hljs-string">sum</span> => <span class="hljs-number">1</span>,
            ];
            $cache->set(<span class="hljs-string">waf-sum-</span> . $ip, $wafsum_arr, time() + $bantime);
        } <span class="hljs-keyword">else</span> {
            <span class="hljs-keyword">if</span> ($wafsum_arr[<span class="hljs-string">sum</span>] > $allowRefresh) {
                $cache->set(<span class="hljs-string">waf-ban-</span> . $ip, <span class="hljs-number">1</span>, time() + $bantime);
                file_put_contents($fileht, $ip . <span class="hljs-string">"n"</span>, FILE_APPEND);
            } <span class="hljs-keyword">else</span> {
                $wafsum_arr[<span class="hljs-string">sum</span>]++;
                $cache->set(<span class="hljs-string">waf-sum-</span> . $ip, $wafsum_arr, time() + $bantime);
            }
        }
        file_put_contents($logPath, $ip . <span class="hljs-string">--</span> . date(<span class="hljs-string">Y-m-d H:i:s</span>, time()) . <span class="hljs-string">--</span> . $uri . <span class="hljs-string">"n"</span>, FILE_APPEND);
        header(<span class="hljs-string">"HTTP/1.1 403 Forbidden"</span>);
        <span class="hljs-keyword">exit</span>(<span class="hljs-string">"请求频率QPS超过限制,请酌情访问,多次提醒后会封禁IP!"</span>);
    } <span class="hljs-keyword">else</span> {
        $wafarr[<span class="hljs-string">sum</span>]++;
        $cache->set(<span class="hljs-string">waf-</span> . $ip, $wafarr, $wafarr[<span class="hljs-string">time</span>]);
    }
}</span>
<?phpini_set("display_errors", "Off");error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);extension_loaded(memcached) or die(memcached扩展未安装!);$logPath = $_SERVER[DOCUMENT_ROOT] . /waf/waf.log; //日志记录文件保存路径,$_SERVER[DOCUMENT_ROOT]是网站根目录$fileht = $_SERVER[DOCUMENT_ROOT] . /waf/ban.log; //被拉黑IP记录文件保存路径if (!file_exists($logPath)) {@mkdir($_SERVER[DOCUMENT_ROOT] . /waf/, 0777, true);@file_put_contents($logPath, );@file_put_contents($fileht, );}$allowtime = 2; //防刷新时间(秒)$allownum = 5; //防刷新次数(比如2秒5次,超过就警告)$allowRefresh = 10; //在此警告次数之后拉黑IP$bantime = 600; //封禁时间,超时自动解封(秒)$ip = $_SERVER[HTTP_X_FORWARDED_FOR] ? $_SERVER[HTTP_X_FORWARDED_FOR] : $_SERVER[REMOTE_ADDR];$uri = $_SERVER[PHP_SELF];$cache = new Memcached();$cache->addServer(127.0.0.1, 11211) or die(memcached连接失败!);$inban = $cache->get(waf-ban- . $ip);if ($inban) {header("HTTP/1.1 403 Forbidden");exit(<h1>403 Forbidden 非法访问</h1><p>你的请求似乎不符合常理,已被服务器防火墙拦截,如有疑问请联系管理员QQ:XXXXXX</br>如果你在开发测试过程中超频被封IP,请等待 . ($bantime / 60) . 分钟后自动解封</br>你的IP: . $ip . </p>);}$wafarr = $cache->get(waf- . $ip);if (!$wafarr) {$wafarr = [path => $uri,time => time() + $allowtime,sum => 1,];$cache->set(waf- . $ip, $wafarr, time() + $allowtime);} else {if ($wafarr[sum] > $allownum) {$wafsum_arr = $cache->get(waf-sum- . $ip);if (!$wafsum_arr) {$wafsum_arr = [sum => 1,];$cache->set(waf-sum- . $ip, $wafsum_arr, time() + $bantime);} else {if ($wafsum_arr[sum] > $allowRefresh) {$cache->set(waf-ban- . $ip, 1, time() + $bantime);file_put_contents($fileht, $ip . "n", FILE_APPEND);} else {$wafsum_arr[sum]++;$cache->set(waf-sum- . $ip, $wafsum_arr, time() + $bantime);}}file_put_contents($logPath, $ip . -- . date(Y-m-d H:i:s, time()) . -- . $uri . "n", FILE_APPEND);header("HTTP/1.1 403 Forbidden");exit("请求频率QPS超过限制,请酌情访问,多次提醒后会封禁IP!");} else {$wafarr[sum]++;$cache->set(waf- . $ip, $wafarr, $wafarr[time]);}}
内容看完了

“PHP限制访问频率,简单防止CC攻击” 的相关文章

(PC+WAP)微信小程序开发代理展示销售pbootcm网站模板 软件开发公司网站源码下载

(PC+WAP)微信小程序开发代理展示销售pbootcm网站模板 软件开发公司网站源码下载

pbootcms内核开发的网站模板,该模板适用于微信小程序网站、软件开发网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可;PC+WAP,同一个后台,数据即时同步,简单适用!附带测试数据!友好的seo,所有页面均都能完全自定义标题/关键词/描述,PHP程序,安全、稳定、快速;用低成…

(PC+WAP)粉色家政服务公司网站模板 月嫂保姆网站源码下载

(PC+WAP)粉色家政服务公司网站模板 月嫂保姆网站源码下载

(PC+WAP)粉色家政服务公司网站模板 月嫂保姆网站源码下载pbootcms内核开发的网站模板,该模板适用于家政服务公司网站、月嫂保姆网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可;PC+WAP,同一个后台,数据即时同步,简单适用!附带测试数据!友好的seo,所有页…

(PC+WAP)红色火锅加盟网站pbootcm模板 餐饮美食网站源码下载

(PC+WAP)红色火锅加盟网站pbootcm模板 餐饮美食网站源码下载

(PC+WAP)红色火锅加盟网站pbootcms模板 餐饮美食网站源码下载pbootcms内核开发的网站模板,该模板适用于火锅加盟网站、餐饮美食网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可;PC+WAP,同一个后台,数据即时同步,简单适用!附带测试数据!友好的seo,所有页面…

(PC+WAP)绿色草坪地坪施工pbootcm网站模板 操场人造草坪网站源码下载

(PC+WAP)绿色草坪地坪施工pbootcm网站模板 操场人造草坪网站源码下载

(PC+WAP)绿色草坪地坪施工pbootcms网站模板 操场人造草坪网站源码下载pbootcms内核开发的网站模板,该模板适用于人造草坪网站、草坪地坪网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可;PC+WAP,同一个后台,数据即时同步,简单适用!附带测试数据!友好的seo,…

(自适应手机版)响应式统一战线政府单位机构类网站源码 红色政府部门机构网站模板

(自适应手机版)响应式统一战线政府单位机构类网站源码 红色政府部门机构网站模板

本套织梦模板采用织梦最新内核开发的模板,这款模板使用范围广,不仅仅局限于一类型的企业,政府部门、单位机构类的网站都可以用该模板。你只需要把图片和文章内容换成你的即可,颜色都可以修改,改完让你耳目一新的感觉!布局规整,利于用户体验,手工书写DIV+CSS,代码精简。同一个后台管理 三网合一简…

0间隔24h采集线报+源码的资源网

0间隔24h采集线报+源码的资源网

1.更新下载类目的采集 及 导入网站程序:jizhiCMS + 高仿新版某刀资源网模板采集程序:蓝天采集 + 已对接好资源站规则网站图片及蓝天采集规则安装教程在下面⬇⬇⬇⬇⬇⬇⬇         链接:https:/…