Changeset 58cad21 in Klonkt for src/middleware/rate-limit.js
- Timestamp:
- 08/19/2026 07:44:50 PM (3 weeks ago)
- Branches:
- main
- Children:
- 598f090
- Parents:
- 5869b1f
- git-author:
- Robin <roboburr@…> (08/19/2026 07:30:37 PM)
- git-committer:
- Robin <roboburr@…> (08/19/2026 07:44:50 PM)
- File:
-
- 1 edited
-
src/middleware/rate-limit.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/middleware/rate-limit.js
r5869b1f r58cad21 101 101 }); 102 102 103 // ─── OpenWebAuth /magic ─────────────────────────────────────────── 104 // Elke poging doet EEN RSA-ontsleuteling met de actorsleutel van een site. Dat 105 // is precies de vorm waar een Bleichenbacher/Marvin-orakel op draait: veel 106 // aangepaste ciphertexts, en uit de antwoorden de sleutel afleiden. De 107 // ontsleuteling zelf is daartegen gehard (implicit rejection in 108 // OpenWebAuthService.decryptToken), maar echte constant-time code bestaat niet 109 // in JavaScript. Een grens op het AANTAL pogingen doet daarom het zware werk: 110 // een orakel heeft er honderdduizenden nodig. 111 // 112 // TELT ALLE POGINGEN, niet alleen de mislukte. Een teller die alleen faalt 113 // meetelt is zelf weer een orakel -- dan leest een aanvaller aan het knijpen af 114 // of zijn padding klopte, en is de vertakking die we bij de ontsleuteling 115 // weghaalden aan de achterdeur terug. 116 // 117 // Per SITE-SLUG, want dat is wat een sleutelpaar heeft (getOrCreateKeys(slug)): 118 // de grens hoort bij de sleutel die beschermd wordt, niet bij het IP van de 119 // eigenaar of bij de doel-host die de aanvaller zelf kiest. 120 // 121 // Twintig per uur is voor een mens onzichtbaar -- je klikt een handvol keer per 122 // dag naar een andere site -- en voor een orakel dodelijk. 123 export const owaMagicLimiter = rateLimit({ 124 windowMs: 60 * 60 * 1000, 125 max: 20, 126 standardHeaders: true, 127 legacyHeaders: false, 128 keyGenerator: (req) => 'owa:' + String((req.body && req.body.slug) || (req.session && req.session.user && req.session.user.id) || 'onbekend'), 129 validate: { ip: false }, 130 }); 131 103 132 // Inbox POSTs each trigger an outbound actor fetch (signature verify) → cap the 104 133 // amplification/queue-inflation a single source can drive. 120/min/IP is still
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)