Bootcamp i backendudvikling med Node.js · Lektion

Rate limiting og beskyttelse mod brute force

Beskyt dine Node.js-API'er mod misbrug, denial-of-service- og credential-stuffing-angreb ved at implementere rate limiting og brute-force-beskyttelse

Lektion 4 af 413 trin

Rate limiting og beskyttelse mod brute force er en gratis Bootcamp i backendudvikling med Node.js-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Bootcamp i backendudvikling med Node.js, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Bootcamp i backendudvikling med Node.js-kurset indeholder 4 lektioner i alt.

Hvorfor begrænse forespørgsler?

Uden begrænsninger kan en enkelt klient sende tusindvis af forespørgsler til din API hvert sekund – for at skrabe data, gætte adgangskoder eller ganske enkelt overbelaste serveren.

Hastighedsbegrænsning sætter et loft over, hvor mange forespørgsler en klient må sende i et tidsvindue.

Angreb, som hastighedsbegrænsning forhindrer

Hastighedsbegrænsning er et vigtigt førsteforsvar mod:

  • Brute-force-forsøg på login
  • Credential stuffing med lækkede adgangskoder
  • Denial-of-service-oversvømmelser
  • Scraping og misbrug af API'er

Sådan fungerer optællingen

En hastighedsbegrænser fører en tæller pr. klient, normalt baseret på IP-adressen. Hver forespørgsel øger tælleren. Når antallet overskrider grænsen inden for tidsvinduet, afvises yderligere forespørgsler med 429 Too Many Requests.

express-rate-limit

Pakken express-rate-limit tilføjer hastighedsbegrænsning som middleware med få kodelinjer. Konfigurér tidsvinduet og det maksimale antal forespørgsler.

const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
  windowMs: 15 * 60 * 1000,
  max: 100
});

Anvendelse af begrænseren

Anvend den globalt med app.use eller på bestemte routes. Når grænsen overskrides, modtager klienter automatisk et 429-svar.

app.use(limiter);
// or just protect one route:
app.use('/api/', limiter);

Strammere grænser for login

Login-endpoints er oplagte mål for brute-force-angreb, så giv dem en strammere grænse end resten af din API.

const loginLimiter = rateLimit({
  windowMs: 10 * 60 * 1000,
  max: 5,
  message: 'Too many login attempts'
});
app.post('/login', loginLimiter, handler);

Delt lager til flere servere

Det standardbaserede lager i hukommelsen fungerer ikke, når du kører flere instanser bag en load balancer – hver instans har sin egen tæller. Brug et delt lager som Redis, så grænserne gælder på tværs af alle servere.

const RedisStore = require('rate-limit-redis');
const limiter = rateLimit({
  store: new RedisStore({ /* client */ }),
  max: 100,
  windowMs: 60000
});

Tillid til den rigtige klient-IP

Bag en proxy ser det ud, som om alle forespørgsler kommer fra proxyens IP-adresse. Fortæl Express, at proxyen er pålidelig, så begrænseren bruger den rigtige klient-IP fra X-Forwarded-For.

app.set('trust proxy', 1);

Kontolåsning

Ud over IP-begrænsninger skal du registrere mislykkede loginforsøg pr. konto. Efter flere mislykkede forsøg kan du midlertidigt låse kontoen eller kræve en CAPTCHA – og dermed forhindre distribuerede brute-force-angreb fra mange IP-adresser.

if (user.failedAttempts >= 5) {
  return res.status(423).json({ error: 'Account locked' });
}

Langsommere svar i stedet for blokering

Et alternativ til hård blokering er en gradvist stigende forsinkelse: Hver gentagen forespørgsel venter lidt længere. Pakken express-slow-down tilføjer latenstid i stedet for at afvise forespørgslen direkte.

const slowDown = require('express-slow-down');
const speedLimiter = slowDown({
  windowMs: 60000,
  delayAfter: 50,
  delayMs: () => 500
});

Information til klienter

Gode begrænsere sender headere med RateLimit, som fortæller klienterne deres resterende kvote og tidspunktet for nulstilling, så velfungerende apps kan sænke tempoet på en hensigtsmæssig måde.

const limiter = rateLimit({
  max: 100,
  windowMs: 60000,
  standardHeaders: true
});

Hurtig kontrol

Test din viden om hastighedsbegrænsning.

Opsummering

Du har lært at beskytte API'er mod misbrug:

  • Hastighedsbegrænsning begrænser antallet af forespørgsler pr. klient og returnerer 429, når grænsen overskrides
  • express-rate-limit tilføjer begrænsningen som middleware; brug strammere grænser ved login
  • Brug et Redis-lager på tværs af flere servere, og indstil trust proxy for at få de rigtige IP-adresser
  • Tilføj kontolåsning, gradvist længere forsinkelser og informative headere

Disse lag forhindrer brute-force-angreb, scraping og DoS-angreb.

Gratis at komme i gang

Lær JavaScript med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
22
Lektioner
92

Ofte stillede spørgsmål

Er lektionen “Rate limiting og beskyttelse mod brute force” gratis?

Ja — hele teksten til “Rate limiting og beskyttelse mod brute force” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Bootcamp i backendudvikling med Node.js-kurset, skal du opgradere til CoddyKit PRO. Bootcamp i backendudvikling med Node.js-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Rate limiting og beskyttelse mod brute force”?

Beskyt dine Node.js-API'er mod misbrug, denial-of-service- og credential-stuffing-angreb ved at implementere rate limiting og brute-force-beskyttelse Du øver dig i Bootcamp i backendudvikling med Node.js med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Bootcamp i backendudvikling med Node.js?

Der kræves ingen tidligere erfaring. Bootcamp i backendudvikling med Node.js på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Rate limiting og beskyttelse mod brute force”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Bootcamp i backendudvikling med Node.js-lektion?

Ja. Alle Bootcamp i backendudvikling med Node.js-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Forstå OWASP Top 10
  2. Sikker kodning i Node.js
  3. Datakryptering og hashing
  4. Rate limiting og beskyttelse mod brute force
← Tilbage til Bootcamp i backendudvikling med Node.js