一段记录访问ip和防止cc攻击php代码
注释很全了
session_start(); // 配置 $ad_dir = '/cc'; // 存储文件的根目录 $ad_temp_file = 'ad_temp_file.txt'; // 记录最近访问IP的文件 $max_requests_per_minute = 30; // 每分钟允许的最大请求数 $block_duration = 600; // 阻止访问的持续时间(秒) // 确保目录存在 if (!is_dir($ad_dir)) { // 尝试创建目录 if (!mkdir($ad_dir, 0777, true)) { die('Failed to create directory: ' . $ad_dir); } } // 获取客户端IP $client_ip = $_SERVER['REMOTE_ADDR']; // 读取临时文件中的IP记录 $ip_records = []; $ip_file_path = $ad_dir . '/' . $ad_temp_file; if (file_exists($ip_file_path)) { $ip_records = explode("\n", file_get_contents($ip_file_path)); // 移除过期的记录 $current_time = time(); $ip_records = array_filter($ip_records, function($record) use ($current_time, $block_duration) { list($ip, $timestamp) = explode(',', $record); return ($current_time - $timestamp) < 60 * $block_duration; }); } // 检查IP的请求数量 $request_counts = array_count_values($ip_records); if (isset($request_counts[$client_ip]) && $request_counts[$client_ip] >= $max_requests_per_minute) { // 如果请求数超过限制,则阻止访问 header('HTTP/1.1 429 Too Many Requests'); die('Too many requests - Please try again later.'); } // 记录本次请求 $ip_records[] = $client_ip . ',' . time(); file_put_contents($ip_file_path, implode("\n", $ip_records));
评论抢沙发