Sicurezza

Come proteggiamo i tuoi dati finanziari

In breve: Bank Statement Parser elabora tutti i dati in locale, oscura i dati personali di default, protegge il parsing XML contro attacchi XXE, esegue i LLM localmente via Ollama e include dipendenze con hash SHA-256 bloccati e una SBOM CycloneDX.

Sicurezza fin dalla progettazione

Bank Statement Parser è progettato per l'elaborazione di dati finanziari sensibili. Ogni decisione progettuale dà priorità a sicurezza, privacy e verificabilità.

Zero dipendenze cloud

Tutta l'elaborazione avviene in locale nel proprio runtime. I parser deterministici non effettuano chiamate di rete. La pipeline PDF ibrida usa Ollama per l'inferenza LLM locale — nessun dato viene inviato ad API cloud. I parser XML sono configurati esplicitamente con no_network=True, resolve_entities=False e load_dtd=False per impedire qualsiasi accesso in uscita.

Oscuramento PII

Le informazioni di identificazione personale (nomi, IBAN, indirizzi postali) vengono automaticamente oscurate nell'output CLI e in modalità streaming. Questa funzione è attiva di default.

Sicurezza XML (protezione XXE)

Tutto il parsing XML usa lxml con impostazioni protette:

Sicurezza archivi ZIP

iter_secure_xml_entries() valida ogni membro ZIP prima dell'estrazione:

Prevenzione path traversal

La validazione dell'input blocca i percorsi file pericolosi:

Verifica del saldo (Golden Rule)

Ogni estrazione PDF viene verificata con l'equazione: opening balance + credits − debits == closing balance. I risultati sono classificati come VERIFIED, DISCREPANCY o FAILED. Le discrepanze possono essere riviste interattivamente con --type review.

Output deterministico

Per i formati strutturati (CAMT, PAIN.001, CSV, OFX, QFX, MT940), dato lo stesso file di input, il parser produce un output identico byte per byte ad ogni esecuzione. Nessuna casualità, nessuna inferenza di modello, nessun campionamento euristico. Questo è fondamentale per:

Sicurezza della supply chain

Verifica in locale

python -m pytest                          # 718 tests, 100% branch coverage
python scripts/verify_locked_hashes.py    # SHA-256 hash verification
git log --show-signature -1               # Verify commit signature