U.S. flag

咔咔技术站所属网站

Dot gov

所属网站使用 KKJSZ.CN
KKJSZ.CN 属于咔咔技术站及其附属网站使用


HTTPS

KKJSZ.CN域名全面使用 HTTPS
小锁 ( ) 或 https:// 表示您已安全连接到KKJSZ.CN网站。

PHP简单防CC攻击方法

咔咔云
2023-02-12 / 0 评论 / 253 阅读 / 正在检测是否收录...

开发原因

由于咔咔云Api站点经常被频繁恶意请求,且偶尔还会被CC攻击的问题,所以咔咔云站长开发了一套防止非正常高频率请求和防止一般CC攻击的PHP版本代码。

优势:

环境要求:

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

使用方法

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

开发源码

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>你的请求似乎不符合常理,已被服务器防火墙拦截,如有疑问请联系管理员QQ79087446/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']);
 }
}

本文首发于:https://www.kkjsz.cn/archives/326.html

本文共 399 个字数,平均阅读时长 ≈ 1分钟
0

打赏

海报

正在生成.....

评论 (0)

取消