document.writeln('');
当前位置:首页 > 免费源码

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

游戏科技网2026年09月14日 23:13免费源码60

介绍:

由于自己使用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" title="View all posts in memcached">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" title="View all posts in memcached">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>
<?php /** * 防止频繁请求,防范CC攻击,支持上万并发 * 原创作者:小伟 * 转载请保留版权,谢谢! */ ini_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模板 餐饮美食网站源码下载

(PC+WAP)红色火锅加盟网站pbootcms模板 餐饮美食网站源码下载pbootcms内核开发的网站模板,该模板适用于火锅加盟网站、餐饮美食网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可;PC+WAP,同一个后台,数据即时同步,简单适用!附带测试数据!友好的seo,所有页面均都能完全自定义标题/关键词/描述,PHP程序,安全、稳定、快速;用低成本获取源源不断订单! 后台:…

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

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

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

100多套官网HTML源码 前端静态页面源码

100多套官网HTML源码 前端静态页面源码

简介: 104套官网源码静态html页面APP下载页面HTML源码,多年收藏精品HTML官网源码104套所有行业均可修改使用。人工精选源码每一套都是精品,纯静态页面无后台 下载连接(复制直接下载) https://wp.123vo.cn/index/share/code/jq2ENvLPb1 内容看完了…

199撸同程旅行学生年卡会员

不是学生也能参与,但是年龄必须在16~24岁之间!   1、微信扫码进入->按照提示填写->然后点击开通->支付1.99元即可->开完后去黑鲸会员->全部权益查看! 2、开通后立得20元无门槛打车/火车/酒店券 3选1!更多详细权益进去后下拉到底点黑鲸会员协议查看!各种出行优惠刚需还挺不错的! 一年内肯定能用上 暑假出行旅游、回家都刚好用得着,1块…

1元云购系统

1元云购系统

简介:最新1元云购源码】购啊购一元微购+带机器人+带控制+购啊购云购电商管理系统源码简介与安装说明:不带授权,带机器人,有控制,带教程,十几分钟就能部署起来。最近感觉云购热度有点高,不知道是不是因为境内高频彩全军覆没导致的。这个算是擦边球的类型吧(虽然印象里好像也是踩红线),也不失为一条出路。最近热度比较高,大家随行就市吧,好像最近要多语言的比较多。有心人,可以现在开始改一套多语言的出来,也许就能…

2019_SWAPIDC最新模板

2019_SWAPIDC最新模板

2019_SWAPIDC最新模板 使用方法:上传根目录/temples 解压即可   下载连接(复制直接下载) https://wp.123vo.cn/index/share/code/Y3iieuJNqd 内容看完了…