TL;DR: Bank Statement Parser verarbeitet alle Daten lokal, schwärzt PII standardmäßig, härtet das XML-Parsing gegen XXE-Angriffe, führt LLMs lokal via Ollama aus und wird mit SHA-256-Hash-gesperrten Abhängigkeiten und einem CycloneDX SBOM ausgeliefert.
Sicherheit durch Design
Bank Statement Parser ist für die Verarbeitung sensibler Finanzdaten gebaut. Jede Designentscheidung priorisiert Sicherheit, Datenschutz und Nachvollziehbarkeit.
Keine Cloud-Abhängigkeit
Die gesamte Verarbeitung erfolgt lokal in Ihrer Laufzeitumgebung. Die deterministischen Parser führen keine Netzwerkaufrufe durch. Die hybride PDF-Pipeline nutzt Ollama für lokale LLM-Inferenz — keine Daten werden an Cloud-APIs gesendet. XML-Parser sind explizit mit no_network=True, resolve_entities=False und load_dtd=False konfiguriert, um jeglichen ausgehenden Zugriff zu verhindern.
PII-Schwärzung
Personenbezogene Daten (Namen, IBANs, Postadressen) werden in der CLI-Ausgabe und im Streaming-Modus automatisch geschwärzt. Dies ist standardmäßig aktiviert.
- CLI: Sensible Felder zeigen
***REDACTED*** - Streaming:
parse_streaming(redact_pii=True)(Standard) - Exporte: CSV/JSON/Excel behalten vollständige Daten für die Weiterverarbeitung
- Opt-in: Verwenden Sie
--show-piioderredact_pii=False, wenn Sie ungeschwärzte Ausgabe benötigen
XML-Sicherheit (XXE-Schutz)
Alles XML-Parsing nutzt lxml mit gehärteten Einstellungen:
resolve_entities=False-- verhindert XML-Entity-Expansion-Angriffeno_network=True-- blockiert alle ausgehenden Netzwerkzugriffe vom Parserload_dtd=False-- verhindert DTD-basierte Angriffe- Namespace-Stripping vor der Verarbeitung -- verarbeitet jede CAMT.053-Variante sicher
ZIP-Archiv-Sicherheit
iter_secure_xml_entries() validiert jedes ZIP-Mitglied vor der Extraktion:
- Eintragsgrößenlimit: 10 MB pro Eintrag (konfigurierbar)
- Gesamtgrößenlimit: 50 MB unkomprimiert gesamt (konfigurierbar)
- Komprimierungsverhältnislimit: Standard 100:1 — erkennt ZIP-Bomben
- Ablehnung verschlüsselter Einträge: Verschlüsselte Einträge werden mit Warnung übersprungen
- Keine Festplattenschreibvorgänge: XML-Bytes werden direkt via
from_bytes()an den Parser übergeben
Schutz vor Pfad-Traversal
Die Eingabevalidierung blockiert gefährliche Dateipfade:
- Null-Bytes, Directory-Traversal-Muster (
../) und Symlinks werden abgelehnt - Dateierweiterungsvalidierung gegen erwartete Formate
- Dateigrößenlimits (Standard 100 MB, konfigurierbar)
Saldoprüfung (Golden Rule)
Jede PDF-Extraktion wird mit der Gleichung geprüft: opening balance + credits − debits == closing balance. Ergebnisse werden als VERIFIED, DISCREPANCY oder FAILED markiert. Abweichungen können interaktiv mit --type review überprüft werden.
Deterministische Ausgabe
Für strukturierte Formate (CAMT, PAIN.001, CSV, OFX, QFX, MT940) erzeugt der Parser bei gleicher Eingabedatei bei jedem Durchlauf byteidentische Ausgabe. Kein Zufall, keine Modellinferenz, kein heuristisches Sampling. Dies ist entscheidend für:
- Audit-Reproduzierbarkeit: Führen Sie dieselbe Datei zweimal aus und vergleichen Sie die Ausgabe
- Regulatorische Compliance: Konsistente Verarbeitung nachweisen
- CI-Verifizierung: 718 Tests erzwingen Determinismus mit 100 % Branch-Coverage
Lieferkettensicherheit
- SHA-256-Hash-gesperrte Abhängigkeiten: Jedes Paket in
poetry.lockhat verifizierte Datei-Hashes - CycloneDX SBOM: Jede Version enthält eine Software Bill of Materials
- GitHub Build-Herkunft: Attestierung verknüpft jedes Artefakt mit seinem Quell-Commit
- Signierte Commits: Alle Commits sind SSH-signiert und werden in CI verifiziert
- Abhängigkeitsverifizierung:
scripts/verify_locked_hashes.pyvalidiert alle Hashes lokal
Lokal verifizieren
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