RELE · 11-privacy-security.md · 13 de 22

En esta página 1. Alcance 0%

11 — Privacidad y seguridad — RELE

1. Alcance

Vertical slice L2 con datos de consumo doméstico, identidad de usuario y CUPS de demo. Documento de decisiones de producto/seguridad, no dictamen legal.

2. Datos tratados

DatoCategoríaDóndeQuién accede
email, namePIIUserself; advisor ve resident en list
passwordHashsecretoUsernadie vía API
JWTcredencialcliente + serverportador
address, cupsidentificador hogarHomeresident + advisor en scope
period, kwh, costEurconsumo / económicoReadingscope por rol
notes, advisorNotecontenido libreReadingscope por rol

3. Roles y autorización

AcciónRESIDENTADVISOR
Ver propias lecturas
Ver todas (demo)No
Crear lecturaNo (403)
Patch statusNo (403)
Ver lectura ajenaNo (403)

Autoridad: NestJS JwtAuthGuard + checks en ReadingsService.
UI: oculta botones; no sustituye al server.

4. Autenticación

AspectoImplementación
MétodoEmail + password
Hashbcrypt (seed y login)
TokenJWT Bearer accessToken
Storage clientelocalStorage keys rele_token, rele_user
TransporteHTTPS en producción (requerido al desplegar)

Riesgos localStorage [SUPUESTO de amenaza]

RiesgoMitigación v1L2+
XSS roba tokenNo HTML user raw; Angular escape defaultCSP, httpOnly cookie
Token largoSecret fuerte en envExpiry corto + refresh

5. Superficie API

EndpointAuthNotas
POST /api/auth/loginPúblicoRate limit futuro
GET/POST/PATCH readings*JWTValidación DTO
  • Prefijo /api.
  • ValidationPipe whitelist + transform.
  • CORS origin: true en dev; restringir en prod.

6. Secretos y configuración

SecretoUbicación correcta
DATABASE_URL.env local / secret host
JWT_SECRET.env / secret host
Passwords demoSolo docs de demo, no prod real

Nunca commitear .env con credenciales Neon reales en repos públicos sin rotación.

7. Privacidad por diseño (v1)

PrincipioAplicación
MinimizaciónNo DNI, no IBAN, no geolocalización
Limitación finalidadLecturas y revisión; no ads
Transparencia demoCuentas demo visibles en login
Separación roles403 cross-action

8. CUPS y datos energéticos

El CUPS identifica el punto de suministro. En demo es ficticio/seed.

Buena prácticav1
No exponer listados públicos de CUPSJWT required
No loguear bodies con PII en prodconsole mínimo
Soft-deleteNo; hard data en demo

9. Amenazas y mitigaciones

AmenazaImpactoMitigación
Credenciales débiles demoAlto en prod realSolo entorno demo; password123 documentado
IDOR lecturaMediocheck residentId en get
Escalada rol en JWTAltorole firmado en token; no confiar en body
Spam createMedioJWT + validación; rate limit L2+
InyecciónMedioPrisma parametrizado
TemaNota
RGPDBase demo; en producto real: base legal, derechos ARCO, DPA con Neon
Cookiesv1 localStorage no cookie banner; reevaluar si analytics
MenoresNo target

11. Logging y auditoría

Eventov1Futuro
Login failHTTP 401contador / alert
Patch statusDB updatedAt + advisorIdaudit log
ExportNoCSV con authz

12. Checklist seguridad cierre

  • Passwords hasheados
  • JWT en lecturas
  • 403 por rol en create/status
  • 403 resident en get ajeno
  • Validación DTO
  • Rate limit login (L2+)
  • HTTPS enforced en deploy
  • CSP / httpOnly (L2+)

13. Incidente demo (procedimiento mínimo)

  1. Rotar JWT_SECRET y forzar re-login.
  2. Rotar password hashes de seed.
  3. Revisar Neon access.
  4. Documentar en registry si aplica.