Pentest R104.1: Salutation-Endpunkte 404 statt 500
INFO-Finding: GET/PUT /api/customers/:id/salutation-preference
warfen bei nicht-existierendem Customer 500 statt 404.
canAccessCustomer prüft für Staff-User nur den Portal-Flag, kein
Existenz-Check. Der Service warf `new Error('Kunde nicht
gefunden')`, was der Controller-Catch generisch auf 500 mappte.
set/clear kamen als Prisma-P2003 (FK-Constraint) durch.
Fix:
- Neuer Helper assertCustomerExists() im customer.service, wirft
ApiError(404, ...). Wird von get/set/clearSalutationPreference
aufgerufen.
- Die drei Controller-Catches respektieren jetzt
ApiError.statusCode → 404 kommt sauber durch, alle anderen
Fehler bleiben bei 500.
Doku: docs/todo.md.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -97,6 +97,17 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
|
||||
|
||||
## ✅ Erledigt
|
||||
|
||||
- [x] **🔒 Pentest R104.1 – Salutation-Endpunkte: 404 statt 500**
|
||||
- INFO-Finding: `GET/PUT /api/customers/:id/salutation-preference`
|
||||
warfen bei nicht-existierendem Customer 500 statt 404.
|
||||
- Ursache: `canAccessCustomer` prüft für Staff-User nur Portal-Flag,
|
||||
kein Existenz-Check. Service warf `new Error(...)`, Controller-
|
||||
Catch mappte generisch auf 500.
|
||||
- Fix: neuer Helper `assertCustomerExists()` im Service wirft
|
||||
`ApiError(404, ...)`. Die drei Controller-Catches respektieren
|
||||
jetzt `ApiError.statusCode`. Auch `set`/`clear` prüfen Existenz
|
||||
(sonst käme ein Prisma-P2003 als 500 durch).
|
||||
|
||||
- [x] **🔒 Pentest R102 – Interne Vertragsnummer nachziehen**
|
||||
- INFO-Finding: `contractNumber` (interne CRM-Nummer) hatte im
|
||||
Update-Path keine Whitelist. `<script>alert(1)</script>` →
|
||||
|
||||
Reference in New Issue
Block a user