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:
@@ -74,6 +74,14 @@ const CONTRACT_DISPLAY_STRING_FIELDS = [
|
|||||||
'previousCustomerNumber',
|
'previousCustomerNumber',
|
||||||
'previousContractNumber',
|
'previousContractNumber',
|
||||||
'notes',
|
'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;
|
] as const;
|
||||||
|
|
||||||
// User-eingabe String-Felder am Customer für dieselbe Read-Time-Defensive.
|
// User-eingabe String-Felder am Customer für dieselbe Read-Time-Defensive.
|
||||||
|
|||||||
Reference in New Issue
Block a user