Pentest 77.3 (LOW): requireIdParam blockt Float-IDs

Number.isInteger(parseInt('4.5')) ist true, weil parseInt den
Nachkomma-Teil silent verwirft. /.../4.5/... traf die echte ID 4
statt 400 zu liefern – gleiches für 4.0 und Exp-Notation (4e1).

Fix: vor dem Parsen Regex /^\\d+$/ gegen die rohe Route-Eingabe.
Nur reine Ziffern erlaubt, keine Floats / Exp / Vorzeichen /
Whitespace / Hex.

Smoke-Test (17 Cases): 4.0, 4.5, 4e1, 4E2, 0, -4, +4, 0x10, 1.0e0,
leading/trailing Space alle abgelehnt; 1, 4, 100, 9999999
durchgewunken.
This commit is contained in:
2026-06-18 15:28:59 +02:00
parent 8992bb7a5d
commit b3469483ca
2 changed files with 22 additions and 2 deletions
+12
View File
@@ -97,6 +97,18 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
## ✅ Erledigt
- [x] **🔒 Pentest 77.3 (LOW): `requireIdParam` ließ Float-IDs durch**
- `Number.isInteger(parseInt('4.5'))` ist `true`, weil `parseInt`
den Nachkomma-Teil silent abschneidet. Damit traf `/.../4.5/...`
auf die echte ID 4 statt 400 zurückzuliefern. Gleiches gilt für
`4.0` und Exp-Notation `4e1`.
- Fix: vorm Parsen Regex `/^\d+$/` auf die rohe `req.params.<name>`-
Eingabe. Nur reine Ziffern erlaubt keine Floats, Exp, Vorzeichen,
Whitespace, Hex.
- Smoke-Test (17 Cases): `4.0`, `4.5`, `4e1`, `4E2`, `0`, `-4`, `+4`,
`0x10`, `1.0e0`, leading/trailing Space alle abgelehnt; `1`, `4`,
`100`, `9999999` durchgewunken.
- [x] **🐞 Stressfrei-Adressen: doppelte E-Mails beim Anlegen erlaubt**
- Bug: User konnte dieselbe Adresse zweimal beim selben Kunden
anlegen (siehe Screenshot mit 2× `max.mustermann@...`). `createEmail`