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