- 91浏览
- 2022-06-09
限制连接速率:
// 每分钟最多允许的请求数量
$maxRequestsPerMinute = 100;
// 获取客户端的IP地址
$clientIp = $_SERVER['REMOTE_ADDR'];
// 生成存储客户端请求记录的文件路径
$recordFile = '/path/to/record/' . $clientIp;
// 如果记录文件不存在,则创建一个新的
if (!file_exists($recordFile)) {
file_put_contents($recordFile, '0');
}
// 读取记录文件中的请求次数
$requestCount = (int) file_get_contents($recordFile);
// 如果请求次数超过限制,则拒绝请求
if ($requestCount >= $maxRequestsPerMinute) {
http_response_code429); // 返回429 Too Many Requests状态码
exit;
}
// 增加请求次数并保存到记录文件中
file_put_contents($recordFile, ++$requestCount);
使用验证码验证:
session_start();
// 生成验证码
$code = rand(1000, 9999);
// 将验证码保存到会话中
$_SESSION['captcha'] = $code;
// 输出验证码图片
header('Content-Type: image/png');
$image = imagecreatetruecolor(100, 30);
$bgColor = imagecolorallocate($image, 255, 255, 255);
$textColor = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $bgColor);
imagestring($image, 5, 25, 5, $code, $textColor);
imagepng($image);
imagedestroy($image);
IP访问频率限制:
// 获取客户端的IP地址
$clientIp = $_SERVER['REMOTE_ADDR'];
// 生成存储客户端请求记录的文件路径
$recordFile = '/path/to/record/' . $clientIp;
// 如果记录文件不存在,则创建一个新的
if (!file_exists($recordFile)) {
file_put_contents($recordFile, time());
}
// 读取记录文件中的最后访问时间
$lastAccessTime = (int) file_get_contents($recordFile);
// 如果距离上次访问时间小于指定的时间间隔,则拒绝请求
$timeInterval = 1; // 1秒
if (time() - $lastAccessTime < $timeInterval) {
http_response_code(429); // 返回429 Too Many Requests状态码
exit;
}
// 更新最后访问时间并保存到记录文件中
file_put_contents($recordFile, time());
请注意,以上代码只是一些基本的示例,可以根据实际情况进行修改和改进。此外,还可以考虑使用反向代、负载均衡器、防火墙等更高级的防护措施来应对DDoS攻击。
版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、本文由会员转载自互联网,如果您是文章原创作者,请联系本站注明您的版权信息。