php实现防洪
PHP实现防洪措施
防洪措施通常用于防止恶意请求、刷单、爬虫等行为。以下是几种常见的PHP防洪实现方法:
限制请求频率
通过记录IP地址的请求次数,限制单位时间内的请求数量。
session_start();
$ip = $_SERVER['REMOTE_ADDR'];
$key = 'req_count_' . $ip;
$limit = 100; // 每分钟最多100次请求
$time_window = 60; // 60秒
if (!isset($_SESSION[$key])) {
$_SESSION[$key] = ['count' => 1, 'start_time' => time()];
} else {
if (time() - $_SESSION[$key]['start_time'] > $time_window) {
$_SESSION[$key] = ['count' => 1, 'start_time' => time()];
} else {
$_SESSION[$key]['count']++;
if ($_SESSION[$key]['count'] > $limit) {
header('HTTP/1.1 429 Too Many Requests');
exit('请求过于频繁,请稍后再试');
}
}
}
验证码机制
在关键操作前要求用户输入验证码,防止自动化脚本。

// 生成验证码
session_start();
$code = rand(1000, 9999);
$_SESSION['captcha'] = $code;
// 验证验证码
if ($_POST['captcha'] != $_SESSION['captcha']) {
die('验证码错误');
}
Token防重复提交
为每个表单生成唯一token,防止重复提交。
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (!isset($_POST['token']) || $_POST['token'] !== $_SESSION['token']) {
die('非法提交');
}
}
// 生成token
$_SESSION['token'] = md5(uniqid(rand(), true));
浏览器指纹识别
收集浏览器特征信息,识别异常访问。

$fingerprint = md5(
$_SERVER['HTTP_USER_AGENT'] .
$_SERVER['HTTP_ACCEPT_LANGUAGE'] .
$_SERVER['HTTP_ACCEPT_ENCODING']
);
if ($fingerprint !== $_SESSION['browser_fingerprint']) {
// 可疑访问
}
云端防护集成
使用第三方服务如Cloudflare的防护功能,在PHP中验证其返回的头信息。
if ($_SERVER['HTTP_CF_CONNECTING_IP']) {
$ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
// Cloudflare防护已启用
}
日志分析与监控
记录异常请求日志,定期分析并更新防护策略。
$log = date('Y-m-d H:i:s') . ' - ' . $_SERVER['REMOTE_ADDR'] . ' - ' . $_SERVER['REQUEST_URI'] . "\n";
file_put_contents('access.log', $log, FILE_APPEND);
以上方法可根据实际需求组合使用,建议结合服务器层面的防护措施如Nginx限流、防火墙规则等,构建多层次的防洪体系。






