PHP में रेट लिमिटिंग: ओवरलोड से सुरक्षा के लिए पूर्ण गाइड
रेट लिमिटिंग (अनुरोध आवृत्ति सीमित करना) वेब एप्लिकेशन सुरक्षा का एक महत्वपूर्ण तंत्र है। यह सर्वर संसाधनों के दुरुपयोग को रोकता है, DDoS हमलों, पासवर्ड ब्रूटफ़ोर्स और स्पैम से बचाता है। PHP में रेट लिमिटिंग लागू करने के लिए कई प्रभावी दृष्टिकोण और लाइब्रेरीज़ मौजूद हैं। इस लेख में हम सर्वोत्तम उपकरणों, कार्य सिद्धांतों और व्यावहारिक उदाहरणों पर चर्चा करेंगे।
रेट लिमिटिंग क्या है और इसकी आवश्यकता क्यों है?
रेट लिमिटिंग एक निश्चित समय अंतराल में क्लाइंट (IP पता, उपयोगकर्ता या API कुंजी) द्वारा किए जा सकने वाले अनुरोधों की अधिकतम संख्या निर्धारित करता है। मुख्य उद्देश्य:
- DDoS से सुरक्षा — बॉट्स द्वारा सर्वर ओवरलोड को रोकना
- ब्रूटफ़ोर्स रोकना — सिस्टम में लॉगिन प्रयासों को सीमित करना
- संसाधनों का न्यायसंगत वितरण — सभी उपयोगकर्ताओं के लिए समान पहुंच
- सर्वर संसाधनों की बचत — डेटाबेस और प्रोसेसर पर लोड कम करना
लोकप्रिय रेट लिमिटिंग एल्गोरिदम
लाइब्रेरी चुनने से पहले मुख्य एल्गोरिदम को समझना महत्वपूर्ण है:
- टोकन बकेट — एक निश्चित दर से टोकन जमा करता है, अल्पकालिक ट्रैफ़िक स्पाइक्स की अनुमति देता है
- लीकी बकेट — अनुरोधों को स्थिर दर से संसाधित करके ट्रैफ़िक को सुचारू करता है
- फिक्स्ड विंडो — एक निश्चित समय अंतराल में अनुरोधों की गणना करता है
- स्लाइडिंग विंडो — अधिक सटीक संस्करण, स्लाइडिंग समय विंडो में अनुरोधों को ध्यान में रखता है
PHP में रेट लिमिटिंग के लिए सर्वश्रेष्ठ लाइब्रेरीज़
1. Symfony Rate Limiter
Symfony का आधिकारिक घटक, जिसे फ्रेमवर्क से स्वतंत्र रूप से उपयोग किया जा सकता है। Redis, APCu और फ़ाइल स्टोरेज का समर्थन करता है।
composer require symfony/rate-limiterउपयोग का उदाहरण:
<?phpuse Symfony\\Component\\RateLimiter\\RateLimiterFactory;use Symfony\\Component\\RateLimiter\\Storage\\InMemoryStorage;
$factory = new RateLimiterFactory([ 'id' => 'login', 'policy' => 'token_bucket', 'limit' => 10, 'rate' => ['interval' => '1 minute'],], new InMemoryStorage());
$limiter = $factory->create('user_123');
if ($limiter->consume()->isAccepted()) { // अनुरोध की अनुमति दें echo "पहुंच स्वीकृत";} else { // अनुरोध अस्वीकार करें http_response_code(429); echo "बहुत अधिक अनुरोध";}?>2. PHP RateLimiter (bantu द्वारा)
सरल परिदृश्यों के लिए हल्की लाइब्रेरी। Redis, Memcached और फ़ाइलों का समर्थन करती है।
composer require bantu/php-ratelimiterउदाहरण:
<?phpuse bantu\\RateLimiter\\RateLimiterFactory;
$factory = new RateLimiterFactory();$limiter = $factory->createRedisRateLimiter( new \\Predis\\Client(), 'api_limit', 100, // अनुरोध सीमा 3600 // सेकंड में विंडो);
if ($limiter->hit($_SERVER['REMOTE_ADDR'])) { echo "अनुरोध स्वीकार किया गया";} else { http_response_code(429); echo "सीमा समाप्त";}?>3. GrahamCampbell/Laravel RateLimiter
यदि आप Laravel के साथ काम कर रहे हैं, तो यह मूल समाधान है। संस्करण 8 से फ्रेमवर्क में निर्मित।
<?phpuse Illuminate\\Support\\Facades\\RateLimiter;
// AppServiceProvider में लिमिटर की परिभाषाRateLimiter::for('api', function ($job) { return \\Illuminate\\Cache\\RateLimiting\\Limit::perMinute(60)->by($job->user->id ?: $job->ip());});
// कंट्रोलर में उपयोगpublic function store(Request $request){ if (RateLimiter::tooManyAttempts('send-message:'.$request->ip(), 5)) { return response('बहुत अधिक संदेश', 429)