繁体   English   中英

防潮-如何限制每秒2个请求

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM