जावास्क्रिप्ट (Node.js) में रेट लिमिटिंग: express-rate-limit लाइब्रेरी के लिए पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

जावास्क्रिप्ट (Node.js) में रेट लिमिटिंग: express-rate-limit के साथ API सुरक्षा

आधुनिक वेब डेवलपमेंट में, सर्वर एप्लिकेशन को अत्यधिक लोड और दुर्भावनापूर्ण हमलों से बचाना एक महत्वपूर्ण कार्य है। सबसे प्रभावी सुरक्षा तंत्रों में से एक है रेट लिमिटिंग (अनुरोध आवृत्ति सीमा)। यह दृष्टिकोण आपको यह नियंत्रित करने की अनुमति देता है कि कोई क्लाइंट (IP पता, उपयोगकर्ता या सत्र) एक निश्चित समय अवधि में सर्वर को कितने अनुरोध भेज सकता है। Node.js और Express इकोसिस्टम में, रेट लिमिटिंग लागू करने के लिए सबसे लोकप्रिय और विश्वसनीय लाइब्रेरी express-rate-limit है।



रेट लिमिटिंग क्या है और इसकी आवश्यकता क्यों है?

रेट लिमिटिंग एक तकनीक है जिसका उपयोग नेटवर्क में ट्रैफ़िक को प्रबंधित करने के लिए किया जाता है। यह सर्वर संसाधनों के दुरुपयोग को रोकता है, निम्नलिखित से बचाता है:

  • DoS/DDoS हमले — सर्वर को डाउन करने के उद्देश्य से बड़े पैमाने पर अनुरोध।
  • Brute-force हमले — पासवर्ड या एक्सेस टोकन का अनुमान लगाना।
  • Web scraping — वेबसाइट से स्वचालित रूप से डेटा एकत्र करना।
  • API का अत्यधिक उपयोग — जब एक क्लाइंट आवश्यकता से अधिक संसाधनों का उपभोग करता है।

रेट लिमिटिंग के बिना, आपका एप्लिकेशन असुरक्षित और अस्थिर हो सकता है, खासकर जब उपयोगकर्ता आधार बढ़ता है।



express-rate-limit लाइब्रेरी

express-rate-limit Express.js के लिए एक मिडलवेयर है जो अनुरोधों को सीमित करने का एक सरल और लचीला तरीका प्रदान करता है। यह अनुरोध प्रसंस्करण श्रृंखला में एकीकृत होता है और स्वचालित रूप से प्रत्येक क्लाइंट से आने वाले अनुरोधों की संख्या को ट्रैक करता है। लाइब्रेरी विभिन्न स्टोरेज (मेमोरी, Redis, MongoDB और अन्य) का समर्थन करती है, जो इसे वितरित सिस्टम के लिए स्केलेबल बनाती है।



स्थापना

आरंभ करने के लिए, npm के माध्यम से लाइब्रेरी स्थापित करें:

npm install express-rate-limit


बुनियादी उपयोग

सबसे सरल उदाहरण — एक ही IP पते से एप्लिकेशन के सभी रूट्स को प्रति घंटे 100 अनुरोधों तक सीमित करना:

const rateLimit = require('express-rate-limit');const express = require('express');const app = express();

// लिमिटर बनाएंconst limiter = rateLimit({ windowMs: 60 * 60 * 1000, // 1 घंटा max: 100, // अधिकतम 100 अनुरोध message: 'आपके IP से बहुत अधिक अनुरोध हैं। कृपया बाद में पुनः प्रयास करें।', standardHeaders: true, // मानक RateLimit-* हेडर लौटाता है legacyHeaders: false, // X-RateLimit-* हेडर बंद करता है});

// सभी रूट्स पर लागू करेंapp.use(limiter);

app.get('/', (req, res) => { res.send('मुख्य पृष्ठ');});

app.listen(3000, () => { console.log('सर्वर पोर्ट 3000 पर चल रहा है');});


विभिन्न रूट्स के लिए कॉन्फ़िगरेशन

अक्सर विभिन्न एंडपॉइंट्स के लिए अलग-अलग सीमाओं की आवश्यकता होती है। उदाहरण के लिए, लॉगिन रूट के लिए अधिक सख्त सीमा निर्धारित की जा सकती है:

const rateLimit = require('express-rate-limit');

// /api/login के लिए सख्त सीमाconst loginLimiter = rateLimit({ windowMs: 15 * 60 * 1000, // 15 मिनट max: 5, // लॉगिन के 5 प्रयास message: { error: 'लॉगिन के बहुत अधिक प्रयास। 15 मिनट में पुनः प्रयास करें।', retryAfter: 15 }, keyGenerator: (req) => { // अधिक सटीक ब्लॉकिंग के लिए IP + उपयोगकर्ता नाम का उपयोग करें return req.ip + req.body.username; }});

app.post('/api/login', loginLimiter, (req, res) => { // प्रमाणीकरण तर्क res.send('लॉगिन सफल');});

// सार्वजनिक API के लिए हल्की सीमाconst apiLimiter = rateLimit({ windowMs: 60 * 1000, // 1 मिनट max: 30, // प्रति मिनट 30 अनुरोध message: 'API अनुरोधों की सीमा पार हो गई।'});

app.use('/api/', apiLimiter);


उन्नत सुविधाएँ

कस्टम स्टोरेज

डिफ़ॉल्ट रूप से, डेटा प्रक्रिया की मेमोरी में संग्रहीत होता है। प्रोडक्शन के लिए, हम अनुशंसा करते हैं

अनुशंसाएँ