Har bygget fail‑closed rate limiting mod misbrug
Har bygget fail‑closed misbrugskontroller — 22 Redis‑baserede rate limiters, Cloudflare Turnstile, idempotens på requests og en origin‑lås — så platformen afviser bots og flood‑angreb i stedet for at stole på dem, der kalder den.
Arbejdet udført: 2025

Foto: 4073527 / Pixabay 
Foto: wallner / Pixabay
22 rate limitere, der lukker ved fejl
Situation. Et offentligt katalog over virksomheder og fagfolk er et mål fra den dag, det går i luften. Scrapere vil have dataene, spamkonti vil have rækkevidden, og et endpoint, der koster platformen rigtige penge at levere — søgning, eksport, alt, der rører et eksternt API — er værd at misbruge alene, fordi det er gratis at kalde. Intet af det er ondskab rettet mod netop denne platform; det er bare hverdagsvejr på det åbne internet.
Opgave. De dyre stier og dem, der inviterer til misbrug, havde brug for grænser, der holder under pres — også det pres, der opstår, når limiterens egen afhængighed er nede.
Handling. Der er 22 rate limitere, hver bygget til den sti, den beskytter, i stedet for ét globalt loft, fordi et loginforsøg, en søgning og en bulkeksport bliver til misbrug ved vidt forskellige hastigheder. Tilstanden ligger i Redis, så en grænse deles på tværs af instanser og ikke gælder pr. proces, hvor den er let at slippe uden om. Den vigtige beslutning er, hvad der sker, når Redis ikke er der: limiterne er fail‑closed. Trafik afvises frem for at blive vinket igennem, hvilket er det mindre bekvemme svar og det eneste forsvarlige. Omkring dem sidder Cloudflare Turnstile på de stier, der er værd at udfordre, 351 linjers idempotency‑middleware, så en skrivning, der bliver forsøgt igen, ikke bliver til to, en origin‑lås, der afviser requests, som ikke kommer ind ad hoveddøren, og en skræddersyet challenge på selve kataloget.
Resultat. Misbrug bliver dyrt for den, der misbruger, og billigt for platformen, og et udfald i limiterens eget lager ender i afvisning og ikke i en åben dør. At være fail‑closed betyder ganske vist, at et Redis‑problem bliver et problem, brugeren kan se — det er accepteret med vilje, fordi alternativet er, at et Redis‑problem bliver et problem på regningen.
Se tilbage på Har hærdet applikationen med nonce‑baseret CSP. Læs videre: Har kørt et løbende sikkerhedsscanningsprogram. Eller tag et kig på hele porteføljen.
Ét stykke af en længere fortegnelse — og det hele ligger her på sitet.
Hver post er skrevet på samme måde: situationen, opgaven, hvad vi gjorde, og hvad der ændrede sig.

