Skip to content

Security: xh74d82hl/reminder_backend

Security

docs/security.md

Sicurezza: segreti, Redis e checklist pre-prod

Gestione segreti, uso di Redis e checklist da verificare prima di andare in produzione.

Segreti obbligatori

  • SECRET_KEY: almeno 32 caratteri, valore casuale in produzione. In prod non usare mai il default.
  • JWT_SECRET_KEY (opzionale): se non impostata viene usata SECRET_KEY. In produzione è consigliata una chiave dedicata (min 32 caratteri) per la firma JWT.
  • DATA_ENCRYPTION_SECRET (opzionale): se non impostata viene usata SECRET_KEY. In produzione è consigliata una chiave dedicata (min 32 caratteri) per la cifratura dei dati sensibili (es. email/telefoni in DB).

In produzione l'avvio fallisce (security checker) se SECRET_KEY è debole o se Redis è richiesto (USE_REDIS=true) ma non raggiungibile.

Redis

  • Quando è obbligatorio: in produzione con USE_REDIS=true (blacklist token, rate limiting, idempotenza, quote SMS/WhatsApp).
  • Variabili: REDIS_URL, eventualmente REDIS_PASSWORD (se incluso in URL). USE_REDIS abilita l'uso di Redis; in prod deve essere true e Redis deve essere raggiungibile all'avvio.
  • Se non c’è Redis: in dev/test è possibile usare il fallback in-memory (DummyRedis); in prod l'avvio viene bloccato dal security checker.

Vedi architettura-e-operazioni.md per il flusso completo.

Checklist pre-produzione

  • .env.* e file con segreti non committati (in .gitignore).
  • SECRET_KEY (e, se usate, JWT_SECRET_KEY, DATA_ENCRYPTION_SECRET) almeno 32 caratteri, non di default.
  • Database: connessione con SSL; credenziali forti e dedicate per l’ambiente.
  • USE_REDIS=true e Redis raggiungibile; REDIS_URL corretta.
  • Credenziali Twilio (e altri servizi) in variabili d’ambiente o secrets manager, mai in codice.
  • CORS_ORIGINS limitato ai domini fidati.
  • Eseguito alembic upgrade head prima di avviare API e scheduler.
  • Verifica manuale o in CI: python -m app.core.security_checker con ENV=production (e variabili prod/secrets).

Per un elenco esteso e pratiche consigliate vedi security_checklist.md.

Validazione in CI/CD

In pipeline di deploy o in un job dedicato:

python -m app.core.security_checker

con ENV=production e le variabili necessarie (o secret inject). Il checker in produzione fallisce con errore se SECRET_KEY debole o Redis non raggiungibile.

Riferimenti

There aren't any published security advisories