Rate Limiting in JavaScript (Node.js): Vollständiger Leitfaden zur Bibliothek express-rate-limit

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Rate Limiting in JavaScript (Node.js): API-Schutz mit express-rate-limit

In der modernen Webentwicklung ist der Schutz von Serveranwendungen vor übermäßiger Belastung und böswilligen Angriffen eine kritische Aufgabe. Einer der effektivsten Schutzmechanismen ist das Rate Limiting (Anfragebegrenzung). Dieser Ansatz ermöglicht es, die Anzahl der Anfragen zu kontrollieren, die ein Client (IP-Adresse, Benutzer oder Sitzung) innerhalb eines bestimmten Zeitraums an den Server senden kann. Im Ökosystem von Node.js und Express ist die beliebteste und zuverlässigste Bibliothek zur Implementierung von Rate Limiting express-rate-limit.



Was ist Rate Limiting und warum wird es benötigt?

Rate Limiting ist eine Technik zur Steuerung des Netzwerkverkehrs. Sie verhindert den Missbrauch von Serverressourcen und schützt vor:

  • DoS/DDoS-Angriffen — massiven Anfragen, die den Server lahmlegen sollen.
  • Brute-Force-Angriffen — dem Durchprobieren von Passwörtern oder Zugriffstoken.
  • Web Scraping — dem automatischen Sammeln von Daten von einer Website.
  • Übermäßiger API-Nutzung — wenn ein einzelner Client mehr Ressourcen verbraucht als zulässig.

Ohne Rate Limiting kann Ihre Anwendung anfällig und instabil werden, insbesondere bei wachsender Benutzerbasis.



Die Bibliothek express-rate-limit

express-rate-limit ist eine Middleware für Express.js, die eine einfache und flexible Möglichkeit zur Anfragebegrenzung bietet. Sie wird in die Anfrageverarbeitungskette eingebunden und verfolgt automatisch die Anzahl der Zugriffe jedes Clients. Die Bibliothek unterstützt verschiedene Speicher (im Arbeitsspeicher, Redis, MongoDB und andere), was sie für verteilte Systeme skalierbar macht.



Installation

Installieren Sie die Bibliothek zunächst über npm:

npm install express-rate-limit


Grundlegende Verwendung

Das einfachste Beispiel ist die Begrenzung aller Routen der Anwendung auf 100 Anfragen pro Stunde von einer IP-Adresse:

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

// Limiter erstellenconst limiter = rateLimit({ windowMs: 60 * 60 * 1000, // 1 Stunde max: 100, // maximal 100 Anfragen message: 'Zu viele Anfragen von Ihrer IP. Bitte versuchen Sie es später erneut.', standardHeaders: true, // Gibt Standard-Header RateLimit-* zurück legacyHeaders: false, // Deaktiviert X-RateLimit-* Header});

// Auf alle Routen anwendenapp.use(limiter);

app.get('/', (req, res) => { res.send('Startseite');});

app.listen(3000, () => { console.log('Server läuft auf Port 3000');});


Konfiguration für verschiedene Routen

Häufig sind unterschiedliche Begrenzungen für verschiedene Endpunkte erforderlich. Beispielsweise kann für die Login-Route ein strengeres Limit festgelegt werden:

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

// Strenges Limit für /api/loginconst loginLimiter = rateLimit({ windowMs: 15 * 60 * 1000, // 15 Minuten max: 5, // 5 Anmeldeversuche message: { error: 'Zu viele Anmeldeversuche. Versuchen Sie es in 15 Minuten erneut.', retryAfter: 15 }, keyGenerator: (req) => { // Verwendet IP + Benutzername für genauere Sperrung return req.ip + req.body.username; }});

app.post('/api/login', loginLimiter, (req, res) => { // Authentifizierungslogik res.send('Anmeldung erfolgreich');});

// Weiches Limit für die öffentliche APIconst apiLimiter = rateLimit({ windowMs: 60 * 1000, // 1 Minute max: 30, // 30 Anfragen pro Minute message: 'API-Anfragelimit überschritten.'});

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


Erweiterte Funktionen

Benutzerdefinierte Speicher

Standardmäßig werden Daten im Arbeitsspeicher des Prozesses gespeichert. Für die Produktion empfehlen

Empfehlungen