956 B
956 B
F-106 — Security gate: APPROVED
Controles verificados
- AuthN/AuthZ:
PUT /orders/:id/itemsy transición admin requierendeps.authenticate+requireRole(user,'admin'). - Validación de entrada:
z.uuid()para variantId, quantity int 1..999, tracking maxLength 120. Sin SQL拼接: todas las queries parametrizadas ($n / ANY($1::uuid[])). - Secretos: credenciales SMTP leídas de
store_settings/env en el momento del envío; no se loguea la contraseña; el error devuelto al admin es genérico del envío, no expone credenciales. - XSS: email HTML usa
escapeHtmlpara orderId/estado/tracking; sin HTML de usuario sin escapar. - Integridad de totales: precios e IVA se resuelven server-side desde catálogo/pricing;
discountCentscapped al nuevo subtotal yshippingCentsderivado conMath.max(0,...)evitando totales negativos. - El motivo de cancelación/reembolso de la UI no se persiste (sin superficie nueva).