Pentest R93: Leerer String != fehlender Query-Param

R93.1 INFO: ?accountId= (explizit-leer) wurde wie ?accountId
weggelassen behandelt → 200 statt 400 auf optionalen Endpunkten.
Pentester-Spec: leerer String ist keine gültige Zahl.

Fix in parsePositiveIntQuery: nur `v === undefined` ist absent;
'', '  ', alles andere muss parsen. Required + optional Modes
unverändert. Sanity-Test: alle 11 Cases grün.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-06-21 14:54:15 +02:00
parent caa283e66f
commit c013e1e747
2 changed files with 26 additions and 3 deletions
+10
View File
@@ -97,6 +97,16 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
## ✅ Erledigt
- [x] **🔒 Pentest R93 Leerer String != fehlender Param**
- R93.1 (INFO): `?accountId=` (explizit-leer) wurde wie `?accountId`
weggelassen behandelt → 200 statt 400 auf optionalen Endpunkten.
Pentester-Spec: leerer String ist KEINE gültige Zahl.
- Fix im `parsePositiveIntQuery()`-Helper: striktere Absent-Logik
(`v === undefined` ist absent; `''`, `' '`, alles andere muss
parsen). Required + optional Modes unverändert.
- Float-Grenzfall (`accountId=5.5` → 5 via `parseInt`) bleibt als
by-design akzeptiert (Pentester-Bestätigung, kein Security-Impact).
- [x] **🔒 Pentest R92 Strict-400 für accountId auf Vertrags-Endpunkten**
- R91-Fix war silent-undefined bei invaliden Werten: `accountId=abc`
auf `GET /contracts/:id/emails` ergab "kein Filter" → Mailbox-