feat(club-002): club PWA: join flow, digital card and installable shell
This commit is contained in:
32
work/artifacts/CLUB-002/security.json
Normal file
32
work/artifacts/CLUB-002/security.json
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"feature_id": "CLUB-002",
|
||||
"agent": "security",
|
||||
"stage": "security_gate",
|
||||
"verdict": "APPROVED",
|
||||
"security_check": "security",
|
||||
"summary": "Aprobado: CLUB-002 no introduce nuevas superficies privilegiadas y mantiene la identidad Club dentro de un proxy same-origin que reusa la cookie existente sin exponer secretos adicionales.",
|
||||
"checks": {
|
||||
"auth_cookie_flow": "OK: el frontend no gestiona tokens Club en localStorage ni query params; el proxy /api/club reenvía la cookie mdv_club y propaga set-cookie del backend para seguir con el modelo httpOnly de CLUB-001.",
|
||||
"data_exposure": "OK: las vistas Club muestran solo memberCode, saldo y movimientos del propio dispositivo; no se añaden datos administrativos ni personales adicionales.",
|
||||
"xss_client": "OK: la UI renderiza datos como texto y SVG generado en React; no usa dangerouslySetInnerHTML, innerHTML ni eval.",
|
||||
"proxy_integrity": "OK: el proxy apunta a rutas concretas del backend preservando el prefijo /club/* y pasa cookies/Content-Type de forma explícita, sin interpolación insegura de cabeceras arbitrarias del usuario.",
|
||||
"dependencies": "OK: no se añadieron dependencias nuevas de terceros.",
|
||||
"pwa_scope": "OK: manifest e iconos no amplían permisos del navegador ni añaden service worker propio en esta fase."
|
||||
},
|
||||
"notes": [
|
||||
"El identificador gráfico de la tarjeta es una representación visual UX, no un secreto ni un mecanismo criptográfico; la semántica operativa de lectura queda para CLUB-003.",
|
||||
"El uso de NEXT_PUBLIC_API_URL queda encapsulado en el proxy servidor; los componentes cliente hablan con /api/club same-origin."
|
||||
],
|
||||
"evidence": [
|
||||
"project/frontend/src/app/api/club/[...path]/route.ts",
|
||||
"project/frontend/src/components/club/ClubExperience.tsx",
|
||||
"project/frontend/src/app/manifest.ts",
|
||||
"project/frontend/src/app/layout.tsx",
|
||||
"rg -n \"dangerouslySetInnerHTML|eval\\(|new Function|innerHTML|beforeinstallprompt|set-cookie|cookie|NEXT_PUBLIC_API_URL\" project/frontend/src/app/api/club project/frontend/src/components/club project/frontend/src/app/layout.tsx project/frontend/src/app/manifest.ts",
|
||||
"cd project/frontend && npm run build",
|
||||
"cd project && npm run typecheck",
|
||||
"cd project && npm run build",
|
||||
"./scripts/verify.sh"
|
||||
],
|
||||
"timestamp": "2026-08-26T17:20:55Z"
|
||||
}
|
||||
Reference in New Issue
Block a user