fix(securitate): hardening prod — headere, body-cap, non-root, backup
Findings security-review P1/P2 (2026-07-03): - headere de securitate pe toate raspunsurile (nosniff, X-Frame-Options, Referrer-Policy, HSTS doar pe HTTPS) + teste - body-cap global 10MB ca middleware ASGI pur (413 inainte de parserul multipart/JSON; verificarea per-endpoint ramane strat 2) - imagine Docker non-root (uid 10001), port 8010 aliniat, loguri pe volumul /data - fail-fast la boot cu rar_env=prod fara AUTOPASS_REQUIRE_API_KEY sau AUTOPASS_SESSION_SECRET - compose: env-uri critice obligatorii (:?) ca api/worker sa nu diverga tacit; FORWARDED_ALLOW_IPS ca rate-limit-ul sa vada IP-ul real dupa Traefik - signup fara PII in stdout: log_event in loc de print cu email (idem notify degradat) - ratelimit: sterge cheile fara timestamp-uri valide (crestere monotona a memoriei pe IP-uri reale) - backup criptat SQLite (backup online API, gpg AES256) + verificare restore + docs/backup.md Suita completa verde: 1557 passed, 1 skipped (live). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
37
.env.example
37
.env.example
@@ -8,20 +8,55 @@ AUTOPASS_CREDS_KEY=
|
||||
|
||||
# --- Auth API-key ---
|
||||
# true = orice /v1/* cere cheie valida (prod). false = dev (fara cheie -> cont id=1).
|
||||
# OBLIGATORIU in docker-compose.yml (:?) — vezi nota din compose.
|
||||
AUTOPASS_REQUIRE_API_KEY=false
|
||||
|
||||
# --- Worker ---
|
||||
# Send catre RAR. false = nu trimite (default, sigur pentru probe). true = end-to-end.
|
||||
# OBLIGATORIU in docker-compose.yml (:?) — vezi nota din compose.
|
||||
AUTOPASS_WORKER_SEND_ENABLED=false
|
||||
# Dev: foloseste creds <test> din settings.xml cand submission-ul nu are creds criptate.
|
||||
AUTOPASS_WORKER_USE_TEST_CREDS=false
|
||||
|
||||
# --- RAR ---
|
||||
# test | prod
|
||||
# test | prod. Ancora globala, NU tinta trimiterilor: dupa PRD 5.20 mediul RAR e
|
||||
# per submission/cont (worker-ul trimite dupa submissions.rar_env). Variabila asta
|
||||
# e doar fallback API pentru conturi fara medii disponibile, backfill la migrare
|
||||
# si afisaj dashboard. OBLIGATORIE in docker-compose.yml (:?) — vezi nota din compose.
|
||||
AUTOPASS_RAR_ENV=test
|
||||
|
||||
# --- Sesiuni web ---
|
||||
# Secret semnat cookie sesiune, PARTAJAT intre restart-uri (fara el, fiecare
|
||||
# redeploy delogheaza toti userii). Genereaza:
|
||||
# python3 -c "import secrets; print(secrets.token_hex(32))"
|
||||
# OBLIGATORIU in docker-compose.yml (:?).
|
||||
AUTOPASS_SESSION_SECRET=
|
||||
# True (prod, implicit in compose): cookie de sesiune cu flag Secure (necesita HTTPS).
|
||||
# False: doar pentru smoke-test local pe HTTP simplu (browserul dropeaza cookie-ul
|
||||
# Secure pe HTTP, deci login-ul ar esua silentios cu true).
|
||||
AUTOPASS_SESSION_HTTPS_ONLY=true
|
||||
|
||||
# --- Embeddings (sugestie mapare, Stratul 2 PRD 5.14) ---
|
||||
# false = dezactivat (default; /mapari instant, sugestii din GOLD/SILVER + fuzzy).
|
||||
# true = sugestii semantice. Prima cerere /mapari lazy-load-eaza modelul fastembed/ONNX
|
||||
# (~230MB pe disc) sincron -> hang la prima cerere. Doar API-ul il incarca.
|
||||
AUTOPASS_EMBEDDINGS_ENABLED=false
|
||||
|
||||
# --- Backup SQLite criptat (T2/P0-4, vezi docs/backup.md) ---
|
||||
# TRIGGER DUR: backup-ul trebuie configurat INAINTE de prima declaratie reala in
|
||||
# prod. Baza e sistemul legal de evidenta (L.142/2023); FINALIZATA e terminal la
|
||||
# RAR, deci pierderea volumului fara backup produce duplicate necorectabile.
|
||||
#
|
||||
# Parola de criptare (gpg AES256) a backup-urilor — obligatorie, tools/backup_db.sh
|
||||
# refuza sa scrie un backup necriptat. Foloseste fisierul (secret montat), NU variabila
|
||||
# inline, in prod:
|
||||
AUTOPASS_BACKUP_PASSPHRASE_FILE=
|
||||
# Alternativa (ex. teste locale) — parola inline, evita in prod:
|
||||
AUTOPASS_BACKUP_PASSPHRASE=
|
||||
# Director destinatie backup-uri (pe volumul persistent, NU efemer).
|
||||
AUTOPASS_BACKUP_DIR=/data/backups
|
||||
# Cate backup-uri locale criptate se pastreaza (cele mai vechi se sterg).
|
||||
AUTOPASS_BACKUP_KEEP=14
|
||||
# Tinta rclone optionala pentru upload off-site (ex. remote:bucket/autopass). Fara ea,
|
||||
# backup-ul ramane doar local pe volum — sarit explicit cu log, nu esec silentios.
|
||||
AUTOPASS_BACKUP_RCLONE_REMOTE=
|
||||
|
||||
Reference in New Issue
Block a user