描述:介绍:由于自己使用API经常被频繁请求,还偶尔被CC攻击,找到一套防止非正常高频率请求和防止一般CC攻击的PHP源码。优势:简单易用,无论你懂不懂PHP开发,只要会复制粘贴就行。Memcached内存缓存技术,高性能,高并发。精准无误,0误封。能防护QPS10000以内的CC攻击,看机器配置,有可能…
由于自己使用API经常被频繁请求,还偶尔被CC攻击,找到一套防止非正常高频率请求和防止一般CC攻击的PHP源码。
以下开源代码添加到你网站核心文件中,相当于你网站任何页面都会引用的一个文件。类似于: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]);}}
pbootcms内核开发的网站模板,该模板适用于微信小程序网站、软件开发网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可;PC+WAP,同一个后台,数据即时同步,简单适用!附带测试数据!友好的seo,所有页面均都能完全自定义标题/关键词/描述,PHP程序,安全、稳定、快速;用低成…
(PC+WAP)粉色家政服务公司网站模板 月嫂保姆网站源码下载pbootcms内核开发的网站模板,该模板适用于家政服务公司网站、月嫂保姆网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可;PC+WAP,同一个后台,数据即时同步,简单适用!附带测试数据!友好的seo,所有页…
(PC+WAP)红色火锅加盟网站pbootcms模板 餐饮美食网站源码下载pbootcms内核开发的网站模板,该模板适用于火锅加盟网站、餐饮美食网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可;PC+WAP,同一个后台,数据即时同步,简单适用!附带测试数据!友好的seo,所有页面…
(PC+WAP)绿色草坪地坪施工pbootcms网站模板 操场人造草坪网站源码下载pbootcms内核开发的网站模板,该模板适用于人造草坪网站、草坪地坪网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可;PC+WAP,同一个后台,数据即时同步,简单适用!附带测试数据!友好的seo,…
本套织梦模板采用织梦最新内核开发的模板,这款模板使用范围广,不仅仅局限于一类型的企业,政府部门、单位机构类的网站都可以用该模板。你只需要把图片和文章内容换成你的即可,颜色都可以修改,改完让你耳目一新的感觉!布局规整,利于用户体验,手工书写DIV+CSS,代码精简。同一个后台管理 三网合一简…
1.更新下载类目的采集 及 导入网站程序:jizhiCMS + 高仿新版某刀资源网模板采集程序:蓝天采集 + 已对接好资源站规则网站图片及蓝天采集规则安装教程在下面⬇⬇⬇⬇⬇⬇⬇ 链接:https:/…