Files
2026-08-21 09:27:55 +02:00

956 B

F-106 — Security gate: APPROVED

Controles verificados

  • AuthN/AuthZ: PUT /orders/:id/items y transición admin requieren deps.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 escapeHtml para orderId/estado/tracking; sin HTML de usuario sin escapar.
  • Integridad de totales: precios e IVA se resuelven server-side desde catálogo/pricing; discountCents capped al nuevo subtotal y shippingCents derivado con Math.max(0,...) evitando totales negativos.
  • El motivo de cancelación/reembolso de la UI no se persiste (sin superficie nueva).