feat(F-106): completed feature
This commit is contained in:
9
work/artifacts/F-106/security.md
Normal file
9
work/artifacts/F-106/security.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# 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).
|
||||
Reference in New Issue
Block a user