一段记录访问ip和防止cc攻击php代码

一段记录访问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));
未经允许不得转载:今夕资源网 » 一段记录访问ip和防止cc攻击php代码
扫二维码手机阅读本页
赞(0)

评论抢沙发

评论前必须登录!