TL;DR: Bank Statement Parser bearbetar all data lokalt, redakterar PII som standard, härdar XML-tolkning mot XXE-attacker, kör LLM:er lokalt via Ollama och levereras med SHA-256 hash-låsta beroenden och en CycloneDX SBOM.
Säkerhet som designprincip
Bank Statement Parser är byggd för att bearbeta känslig finansiell data. Varje designbeslut prioriterar säkerhet, integritet och revisionsbarhet.
Noll molnberoende
All bearbetning sker lokalt inom din körtid. De deterministiska parsrarna gör noll nätverksanrop. Hybrid-PDF-pipelinen använder Ollama för lokal LLM-inferens — ingen data skickas till moln-API:er. XML-tolkare är uttryckligen konfigurerade med no_network=True, resolve_entities=False och load_dtd=False för att förhindra all utgående åtkomst.
PII-redaktion
Personligt identifierbar information (namn, IBAN, postadresser) redakteras automatiskt i CLI-utdata och streamingläge. Detta är på som standard.
- CLI: Känsliga fält visas som
***REDACTED*** - Streaming:
parse_streaming(redact_pii=True)(standard) - Export: CSV/JSON/Excel behåller fullständiga data för nedströmsbearbetning
- Aktivera: Använd
--show-piiellerredact_pii=Falsenär du behöver oredakterad utdata
XML-säkerhet (XXE-skydd)
All XML-tolkning använder lxml med härdade inställningar:
resolve_entities=False— förhindrar XML-entitetsexpansionsattackerno_network=True— blockerar all utgående nätverksåtkomst från parsernload_dtd=False— förhindrar DTD-baserade attacker- Namnrymdsstrippning före bearbetning — hanterar alla CAMT.053-varianter säkert
ZIP-arkivsäkerhet
iter_secure_xml_entries() validerar varje ZIP-medlem innan extrahering:
- Storlekstak per post: 10 MB per post (konfigurerbart)
- Totalt storlekstak: 50 MB totalt okomprimerat (konfigurerbart)
- Kompressionsförhållandegräns: 100:1 standard — upptäcker ZIP-bomber
- Avvisning av krypterade poster: Krypterade poster hoppas över med en varning
- Ingen diskskrivning: XML-bytes skickas direkt till parsern via
from_bytes()
Vägtraverseringsskydd
Indatavalidering blockerar farliga filsökvägar:
- Nullbyte, katalogtraverseringsmönster (
../) och symboliska länkar avvisas - Filtilläggsvalidering mot förväntade format
- Filstorleksgränser (100 MB standard, konfigurerbar)
Saldoverifiering (Golden Rule)
Varje PDF-extraktion verifieras med ekvationen: opening balance + credits − debits == closing balance. Resultat taggas som VERIFIED, DISCREPANCY eller FAILED. Avvikelser kan granskas interaktivt med --type review.
Deterministisk utdata
För strukturerade format (CAMT, PAIN.001, CSV, OFX, QFX, MT940) producerar parsern byte-identisk utdata varje körning givet samma indatafil. Ingen slumpmässighet, ingen modellinferens, ingen heuristisk sampling. Detta är avgörande för:
- Revisionsreproducerbarhet: Kör samma fil två gånger och jämför utdatan
- Regulatorisk efterlevnad: Visa konsekvent bearbetning
- CI-verifiering: 718 tester upprätthåller determinism med 100 % grenstäckning
Supply-chain-säkerhet
- SHA-256 hash-låsta beroenden: Varje paket i
poetry.lockhar verifierade filhashar - CycloneDX SBOM: Varje utgåva inkluderar en mjukvarulista
- GitHub-byggets härkomst: Attestation länkar varje artefakt till dess källcommit
- Signerade commits: Alla commits är SSH-signerade och verifierade i CI
- Beroendeverifiering:
scripts/verify_locked_hashes.pyvaliderar alla hashar lokalt
Verifiera lokalt
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