FEAT_API_RATE_LIMIT_COND

This commit is contained in:
velz 2026-02-23 18:54:20 +05:30
parent c520b87af5
commit d20f1a9528
4 changed files with 15 additions and 6 deletions

View File

@ -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);

View File

@ -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') ?? '';

View File

@ -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);

View File

@ -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)