FEAT_API_RATE_LIMIT_COND
This commit is contained in:
parent
c520b87af5
commit
d20f1a9528
@ -39,7 +39,7 @@ class AuthApiRateLimitFilter implements FilterInterface
|
||||
public function before(RequestInterface $request, $arguments = null)
|
||||
{
|
||||
// $this->limiter->unblockUser('9698262411');die;
|
||||
$fingerprint = generateFingerprint();
|
||||
$fingerprint = generateFingerprint(exclude_ua: true);
|
||||
// echo $fingerprint;die;
|
||||
// 1. IP-level check
|
||||
$ipResult = $this->limiter->checkIp($fingerprint, 'authApi');
|
||||
@ -96,7 +96,8 @@ class AuthApiRateLimitFilter implements FilterInterface
|
||||
return; // 2xx/3xx = success; 429/403/451 already handled
|
||||
}
|
||||
|
||||
$fingerprint = $request->getVar('rateLimitFingerprint') ?? generateFingerprint();
|
||||
$fingerprint = $request->getVar('rateLimitFingerprint') ?? generateFingerprint(exclude_ua: true);
|
||||
|
||||
$identity = $request->getVar('rateLimitIdentity')
|
||||
?? resolveIdentity($request);
|
||||
|
||||
|
||||
@ -39,7 +39,7 @@ class JwtApiRateLimitFilter implements FilterInterface
|
||||
|
||||
public function before(RequestInterface $request, $arguments = null)
|
||||
{
|
||||
$fingerprint = generateFingerprint();
|
||||
$fingerprint = generateFingerprint(exclude_ua: true);
|
||||
// echo $fingerprint;die;
|
||||
// 1. IP-level throttle + block check
|
||||
$ipResult = $this->limiter->checkIp($fingerprint, 'jwtApi');
|
||||
@ -84,7 +84,8 @@ class JwtApiRateLimitFilter implements FilterInterface
|
||||
return;
|
||||
}
|
||||
|
||||
$fingerprint = $request->getGlobal('rateLimitFingerprint') ?? generateFingerprint();
|
||||
$fingerprint = $request->getGlobal('rateLimitFingerprint') ?? generateFingerprint(exclude_ua: true);
|
||||
|
||||
// $identity = $request->getGlobal('rateLimitIdentity') ?? $this->resolveIdentityFromJwt();
|
||||
$identity = $request->getGlobal('rateLimitIdentity') ?? '';
|
||||
|
||||
|
||||
@ -773,7 +773,7 @@ function getRealClientIP()
|
||||
return $request->getIPAddress();
|
||||
}
|
||||
|
||||
function generateFingerprint(): string
|
||||
function generateFingerprint(bool $exclude_ua = false): string
|
||||
{
|
||||
$request = service('request');
|
||||
|
||||
@ -804,7 +804,11 @@ function generateFingerprint(): string
|
||||
}
|
||||
|
||||
// return $ua . '_' . $ipGroup;
|
||||
if($exclude_ua){
|
||||
return hash('sha256', $ipGroup);
|
||||
}
|
||||
return hash('sha256', $ua . '|' . $ipGroup);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -861,7 +865,9 @@ function generateFingerprint(): string
|
||||
$limiter = \Config\Services::limiter(); // or your custom limiter service
|
||||
|
||||
$fingerprint = $request->getVar('rateLimitFingerprint')
|
||||
?? generateFingerprint();
|
||||
?? generateFingerprint(exclude_ua: true);
|
||||
|
||||
|
||||
|
||||
$identity = $request->getVar('rateLimitIdentity')
|
||||
?? resolveIdentity($request);
|
||||
|
||||
@ -113,6 +113,7 @@ class RateLimiterService
|
||||
'level' => $level,
|
||||
'blocked_at' => time(),
|
||||
'fingerprint'=> $fingerprint,
|
||||
'ip' => getRealClientIP(),
|
||||
];
|
||||
|
||||
// Duration 0 = store for 10 years (permanent until manual unblock)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user