Audit Log¶
Cosa Viene Registrato¶
Ogni azione sensibile viene registrata nella tabella audit_logs con:
| Campo | Contenuto |
|---|---|
userId |
Chi ha eseguito l'azione (null per azioni di sistema) |
action |
Cosa è stato fatto: LOGIN, AUTH_FAILURE, UPDATE, DELETE, ecc. |
resource |
Su cosa: auth, users, finance, ecc. |
details |
Dettagli JSON (sanitizzati — senza dati sensibili) |
ipAddress |
Indirizzo IP del richiedente |
userAgent |
Browser/client |
createdAt |
Timestamp preciso |
Due Modalità di Logging¶
Automatica — AuditInterceptor¶
AuditInterceptor è un interceptor NestJS che intercetta automaticamente ogni richiesta HTTP modificante (POST, PUT, PATCH, DELETE) e la registra senza che il developer debba fare nulla.
Manuale — AuditLogsService¶
AuditLogsService.logAction() viene chiamato esplicitamente nei punti critici:
- Login riuscito
- Login fallito (con notifica admin)
- Impersonation
- Cambio password
- Operazioni di sistema
Sicurezza del Log¶
sanitizeDetails() pulisce i dettagli prima di salvarli — rimuove automaticamente campi come password, token, secret per evitare che finiscano nel log.
Gli userId non-UUID (azioni di sistema, processi batch) vengono salvati con userId: null per evitare errori di constraint del database.
Alert di Sicurezza Automatici¶
Ogni tentativo di login fallito genera:
- Una voce in
audit_logsconaction: AUTH_FAILURE - Una notifica immediata a tutti gli admin via
NotificationsService.notifyAdmins()
Questo avviene per due casi distinti: - Utente non trovato - Password errata
In entrambi i casi il messaggio all'utente è identico ("credenziali non valide") — anti-enumeration.