Doku: URL-encoded Route-Params als by-design dokumentiert (R85-INFO)

This commit is contained in:
2026-06-18 18:54:24 +02:00
parent dfe2a4b241
commit 9274c0adaf
+31
View File
@@ -473,6 +473,37 @@ Vor jedem Launch mit echten Tokens probieren.
--- ---
## 📝 Bewusste Akzeptanz URL-encoded Route-Parameter
**Finding aus Pentest-Runde 85 (INFO, kein Security-Impact):**
`/api/stressfrei-emails/%31/...` (URL-encoded `1`) liefert dieselbe
Antwort wie `/api/stressfrei-emails/1/...` die `requireIdParam`-
Validierung mit `/^\d+$/` sieht die schon dekodierte Form, weil
Express URL-Parameter **vor** dem Routing dekodiert.
**Wir akzeptieren das als by-design:**
1. RFC 3986 fordert genau dieses Verhalten: prozentual-codierte und
roh-Form derselben Zeichen müssen semantisch identisch behandelt
werden. `/1` und `/%31` ist HTTP-konform äquivalent.
2. Ein nachträglicher Strict-Check auf `req.url` (roh) würde
legitime Clients brechen Browser-Bookmarks mit URL-Encoding,
curl-Calls mit `--data-urlencode`, Proxy-Tools die URL-encoden,
Mobile-Clients mit kanonischer URL-Normalisierung.
3. Der Pentester selbst bestätigt: **kein Security-Impact** die ID
landet nach Dekodierung als gültige Zahl bei der gleichen
Auth-/IDOR-Logik, die auch für die rohe Form greift. Insbesondere
`canAccessStressfreiEmail` läuft identisch.
4. Validierungs- und Access-Control-Kette ist nach der Dekodierung
identisch dicht Auth, Ownership, Rate-Limit, alles greift gleich.
**Code-Notiz:** kein Patch nötig. Diese Markdown-Sektion ist die
einzige Dokumentation, damit das in zukünftigen Pentest-Runden nicht
erneut als „offenes Finding" auftaucht.
---
## 🧭 Wann ist „dicht" dicht? ## 🧭 Wann ist „dicht" dicht?
100 % gibt es nicht. Erreicht ist: 100 % gibt es nicht. Erreicht ist: