[英]php - Antiflood - how to limit 2 requests per second
我有防洪功能
if (!isset($_SESSION)) {
session_start();
}
if($_SESSION['last_session_request'] > time() - 1){
die();
}
$_SESSION['last_session_request'] = time();
如果用户在1秒钟内请求多个请求,脚本将自行停止。 我想做的是,我需要每秒最多允许2个请求(而不是1个)。 我怎样才能做到这一点 ?
我会这样:
<?
$time_interval = 1;#In seconds
$max_requests = 2;
$fast_request_check = ($_SESSION['last_session_request'] > time() - $time_interval);
if (!isset($_SESSION))
{
# This is fresh session, initialize session and its variables
session_start();
$_SESSION['last_session_request'] = time();
$_SESSION['request_cnt'] = 1;
}
elseif($fast_request_check && ($_SESSION['request_cnt'] < $max_requests))
{
# This is fast, consecutive request, but meets max requests limit
$_SESSION['request_cnt']++;
}
elseif($fast_request_check)
{
# This is fast, consecutive request, and exceeds max requests limit - kill it
die();
}
else
{
# This request is not fast, so reset session variables
$_SESSION['last_session_request'] = time();
$_SESSION['request_cnt'] = 1;
}
但是,有一件事-如果您试图做这件事之王,它将无法保护您免受DDoS攻击。 可以很容易地删除PHP中的会话,即使没有,也可以从一个客户端创建多个会话。 如果您想进一步了解保护,请阅读此讨论 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.