Pentest 42.5 MEDIUM: priceFirst12Months/priceFrom13Months/priceAfter24Months in Display-Strip aufnehmen

Die drei Preisfelder sind im Schema String? (freitextlich für
Angaben wie "0,28 €/kWh"). sanitizeContract strippte sie auf
dem Read-Pfad nicht – damit lieferten Alt-Daten mit XSS-Payloads
("<script>alert(1)</script>") sie 1:1 an die UI aus.

Defense-in-Depth: Write-Pfad hat sanitizeContractBody, das alle
String-Felder rekursiv stripped. Diese Read-Time-Variante
schützt zusätzlich vor Alt-Daten und einem kompromittierten
Admin-Account.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-30 19:24:11 +02:00
parent a20e331f83
commit b9a6d99d50
+8
View File
@@ -74,6 +74,14 @@ const CONTRACT_DISPLAY_STRING_FIELDS = [
'previousCustomerNumber',
'previousContractNumber',
'notes',
// Preisfelder sind im Schema `String?` (freitextlich, nicht numerisch),
// damit Tarifangaben wie "0,28 €/kWh" oder "27,90 € + 10 € Bonus"
// möglich sind. Pentest 2026-05-30 (MEDIUM, 42.5): rohe HTML-Payloads
// in den drei Feldern überlebten den Write-Strip nicht und kommen
// beim Read 1:1 wieder raus.
'priceFirst12Months',
'priceFrom13Months',
'priceAfter24Months',
] as const;
// User-eingabe String-Felder am Customer für dieselbe Read-Time-Defensive.