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>
63 lines
3.2 KiB
Plaintext
63 lines
3.2 KiB
Plaintext
# Gateway RAR AUTOPASS — variabile de mediu (copiaza in .env; .env NU se comite).
|
|
# Compose citeste .env automat. Prefix AUTOPASS_ pentru toate.
|
|
|
|
# --- CRITIC: cheie criptare creds RAR (Fernet) ---
|
|
# PARTAJATA intre api si worker (API cripteaza, worker decripteaza). Genereaza:
|
|
# python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
|
|
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. 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=
|