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

介绍:

由于自己使用API常常被屡次请求,制访止还偶然被CC攻击,问频找到一套防止非正常高频率请求和防止一般CC攻击的率简oppo云服务官网PHP源码。

优势:

简易易用,易防无论你懂不懂PHP开发,制访止只要会拷贝粘贴就行。问频 Memcached内存缓存技术,率简高效能,易防高并发。制访止oppo云服务官网 精准无误,问频0误封。率简 能防护QPS10000以内的易防CC攻击,看机器配置,制访止有可能更高。问频 支撑范围较广,率简直接你网站支撑PHP就行。 源码简易,可自行修订,可以套自己喜爱的前端模板主题。

要求:

PHP版本 ≥ 7.2 PHP需装配Memcached扩展 Memcached ≥1.6

使用方法:

以下开源代码添加到你网站核心文件中,相当于你网站任何页面都会援引的一个文件。类似于:config.php

或者根据你的程序秩序添加到需要防CC的PHP文件头部即可。

源码:

<?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]); } } 内容看完了
皖ICP备2025077989号-141