Doku: URL-encoded Route-Params als by-design dokumentiert (R85-INFO)
This commit is contained in:
@@ -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?
|
||||
|
||||
100 % gibt es nicht. Erreicht ist:
|
||||
|
||||
Reference in New Issue
Block a user