TL;DR: Bank Statement Parser verwerkt alle gegevens lokaal, redigeert PII standaard, verhardt XML-parsing tegen XXE-aanvallen, draait LLM's lokaal via Ollama en wordt geleverd met SHA-256 hash-locked afhankelijkheden en een CycloneDX SBOM.
Beveiliging door ontwerp
Bank Statement Parser is gebouwd voor het verwerken van gevoelige financiële gegevens. Elke ontwerpbeslissing geeft prioriteit aan beveiliging, privacy en controleerbaarheid.
Geen cloudafhankelijkheid
Alle verwerking gebeurt lokaal binnen uw runtime. De deterministische parsers maken nul netwerkoproepen. De hybride PDF-pipeline gebruikt Ollama voor lokale LLM-inferentie — er worden geen gegevens naar cloud-API's gestuurd. XML-parsers zijn expliciet geconfigureerd met no_network=True, resolve_entities=False en load_dtd=False om uitgaande toegang te voorkomen.
PII-redactie
Persoonlijk identificeerbare informatie (namen, IBAN's, postadressen) wordt automatisch geredigeerd in CLI-uitvoer en streaming-modus. Dit staat standaard aan.
- CLI: Gevoelige velden worden weergegeven als
***REDACTED*** - Streaming:
parse_streaming(redact_pii=True)(standaard) - Exports: CSV/JSON/Excel behoudt volledige gegevens voor verdere verwerking
- Opt-in: Gebruik
--show-piiofredact_pii=Falsewanneer u niet-geredigeerde uitvoer nodig heeft
XML-beveiliging (XXE-bescherming)
Alle XML-parsing gebruikt lxml met geharde instellingen:
resolve_entities=False-- voorkomt XML entity expansion-aanvallenno_network=True-- blokkeert alle uitgaande netwerktoegang van de parserload_dtd=False-- voorkomt DTD-gebaseerde aanvallen- Naamruimtestripping vóór verwerking -- verwerkt elke CAMT.053-variant veilig
ZIP-archiefbeveiliging
iter_secure_xml_entries() valideert elk ZIP-bestand vóór extractie:
- Maximale invoergrootte: 10 MB per bestand (configureerbaar)
- Totale maximale grootte: 50 MB totaal ongecomprimeerd (configureerbaar)
- Compressieverhoudingslimiet: standaard 100:1 -- detecteert ZIP-bommen
- Afwijzing van versleutelde bestanden: Versleutelde bestanden worden overgeslagen met een waarschuwing
- Geen schijfschrijfbewerkingen: XML-bytes gaan rechtstreeks naar de parser via
from_bytes()
Pad-traversalpreventie
Invoervalidatie blokkeert gevaarlijke bestandspaden:
- Null bytes, directory-traversalpatronen (
../) en symlinks worden afgewezen - Validatie van bestandsextensies tegen verwachte formaten
- Bestandsgroottelimieten (standaard 100 MB, configureerbaar)
Saldoverificatie (Golden Rule)
Elke PDF-extractie wordt geverifieerd met de formule: opening balance + credits − debits == closing balance. Resultaten worden gemarkeerd als VERIFIED, DISCREPANCY of FAILED. Afwijkingen kunt u interactief beoordelen met --type review.
Deterministische uitvoer
Voor gestructureerde formaten (CAMT, PAIN.001, CSV, OFX, QFX, MT940) produceert de parser bij hetzelfde invoerbestand elke run byte-identieke uitvoer. Geen willekeur, geen modelinferentie, geen heuristische bemonstering. Dit is essentieel voor:
- Auditreproduceerbaarheid: Voer hetzelfde bestand twee keer uit en vergelijk de uitvoer
- Naleving van regelgeving: Toon consistente verwerking aan
- CI-verificatie: 718 tests dwingen determinisme af met 100% branchdekking
Supply-chainbeveiliging
- SHA-256 hash-locked afhankelijkheden: Elk pakket in
poetry.lockheeft geverifieerde bestandshashes - CycloneDX SBOM: Elke release bevat een Software Bill of Materials
- GitHub build-herkomst: Attestation koppelt elk artefact aan zijn broncommit
- Ondertekende commits: Alle commits zijn SSH-ondertekend en geverifieerd in CI
- Afhankelijkheidsverificatie:
scripts/verify_locked_hashes.pyvalideert alle hashes lokaal
Lokaal verifiëren
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