File tree Expand file tree Collapse file tree 1 file changed +16
-5
lines changed Expand file tree Collapse file tree 1 file changed +16
-5
lines changed Original file line number Diff line number Diff line change 22
33namespace App \Providers ;
44
5+ use App \Network \DNSLookup ;
56use Illuminate \Cache \RateLimiting \Limit ;
67use Illuminate \Http \Request ;
78use Illuminate \Support \Facades \RateLimiter ;
@@ -24,20 +25,30 @@ public function boot(): void
2425 {
2526 RateLimiter::for ('site ' , function (Request $ request ) {
2627 $ siteHost = 'default ' ;
27- $ siteIp = 'default ' ;
2828
2929 if (is_string ($ request ->input ('url ' ))) {
3030 $ siteHost = parse_url ($ request ->input ('url ' ), PHP_URL_HOST );
3131 }
3232
33- if ($ siteHost !== 'default ' && $ dnsResult = dns_get_record ((string ) $ siteHost , DNS_A )) {
34- $ siteIp = $ dnsResult [0 ]['ip ' ];
33+ // Define a rate limit per target IP
34+ $ siteIpLimits = [];
35+
36+ if ($ siteHost !== 'default ' ) {
37+ $ siteIps = (new DNSLookup )->getIPs ($ siteHost );
38+
39+ foreach ($ siteIps as $ siteIp ) {
40+ $ siteIpLimits [] = Limit::perMinute (5 )->by ("siteip- " . $ siteIp );
41+ }
42+ }
43+
44+ if (!count ($ siteIpLimits )) {
45+ $ siteIpLimits = [Limit::perMinute (5 )->by ("siteip-default " )];
3546 }
3647
3748 return [
3849 Limit::perMinute (5 )->by ("sitehost- " . $ siteHost ),
39- Limit::perMinute (10 )->by ("siteip - " . $ siteIp ),
40- Limit:: perMinute ( 50 )-> by ( " ip- " . $ request -> ip ())
50+ Limit::perMinute (50 )->by ("requestip - " . $ request -> ip () ),
51+ ... $ siteIpLimits
4152 ];
4253 });
4354 }
You can’t perform that action at this time.
0 commit comments