diff --git a/backend/src/controllers/customer.controller.ts b/backend/src/controllers/customer.controller.ts index 059cf6fb..34fe55b1 100644 --- a/backend/src/controllers/customer.controller.ts +++ b/backend/src/controllers/customer.controller.ts @@ -24,6 +24,23 @@ import { } from '../utils/accessControl.js'; import { ApiError } from '../utils/apiError.js'; +// Mass-Assignment-Schutz für Bankkarten (Pentest R155): nur diese Felder dürfen +// aus dem Request-Body übernommen werden – NICHT customerId/id/createdAt/… Nur +// tatsächlich gesendete Keys landen im Ergebnis, damit Partial-Updates und das +// Änderungs-Audit korrekt bleiben. +const BANK_CARD_ALLOWED_FIELDS = [ + 'accountHolder', 'iban', 'cardNumber', 'bic', 'bankName', 'expiryDate', 'description', 'isActive', +] as const; + +function pickBankCardFields(body: unknown): Record { + const src = (body && typeof body === 'object') ? (body as Record) : {}; + const out: Record = {}; + for (const key of BANK_CARD_ALLOWED_FIELDS) { + if (key in src) out[key] = src[key]; + } + return out; +} + // Customer CRUD export async function getCustomers(req: AuthRequest, res: Response): Promise { try { @@ -401,7 +418,8 @@ export async function createBankCard(req: AuthRequest, res: Response): Promise