Pentest 81.1 (MEDIUM): Self-Forward erzeugte Mail-Loop am Provider
Bug: Die Stressfrei-Adresse selbst (max@stressfrei-wechseln.net) konnte als zusätzliches Weiterleitungsziel eingetragen werden, auch Plus-Varianten. Plesk leitet auf sich selbst um → Mail-Loop. Backend setAdditionalForwards: lädt zusätzlich meta.email, vergleicht canonicalEmailKey gegen canonicalEmailKey(meta.email). Bei Treffer hartes ApiError(400) mit klarer "zeigt auf die Adresse selbst – Mail-Loop"-Meldung statt silent dedup – der User soll merken, dass sein Eintrag bewusst abgelehnt wurde. Frontend AdditionalForwardsModal: zusätzliche proaktive Validierung im Sub-Modal mit identischem canonicalize-Helper. Neuer selfEmail- Prop, damit auch der Create-Modus (vor Persist) den Check fahren kann. Spart Roundtrip + sofort sprechende Meldung.
This commit is contained in:
@@ -97,6 +97,23 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
|
||||
|
||||
## ✅ Erledigt
|
||||
|
||||
- [x] **🔒 Pentest 81.1 (MEDIUM): Self-Forward erzeugte Mail-Loop am Provider**
|
||||
- Bug: User konnte die Stressfrei-Adresse selbst (z.B.
|
||||
`max.mustermann@stressfrei-wechseln.net`) als zusätzliches
|
||||
Weiterleitungsziel eintragen – auch Plus-Varianten davon. Plesk
|
||||
leitet auf sich selbst um → Mail-Loop.
|
||||
- Backend (`setAdditionalForwards`): zieht jetzt zusätzlich
|
||||
`meta.email` aus der DB und vergleicht `canonicalEmailKey(eintrag)`
|
||||
gegen `canonicalEmailKey(meta.email)`. Bei Treffer hartes
|
||||
`ApiError(400)` mit klarer Self-Forward-Meldung statt silent dedup
|
||||
– der User soll merken, dass sein Eintrag bewusst abgelehnt wurde.
|
||||
- Frontend (`AdditionalForwardsModal`): zusätzlich proaktive
|
||||
Validierung im Sub-Modal mit identischem `canonicalize`-Helper
|
||||
(Plus-Tag strippen, lowercase). Neuer Prop `selfEmail`, damit
|
||||
auch der Create-Modus (vor dem Persistieren) den Check fahren
|
||||
kann. Spart einen Roundtrip + zeigt sofort eine sprechende
|
||||
Meldung „… zeigt auf die Adresse selbst – Mail-Loop".
|
||||
|
||||
- [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/...`
|
||||
|
||||
Reference in New Issue
Block a user