TL;DR: Bank Statement Parser zpracovává veškerá data lokálně, ve výchozím nastavení rediguje PII, zabezpečuje XML parsování proti XXE útokům, provozuje LLM lokálně přes Ollama a dodává se s SHA-256 hash-locked závislostmi a CycloneDX SBOM.
Zabezpečení od návrhu
Bank Statement Parser je vytvořen pro zpracování citlivých finančních dat. Každé rozhodnutí upřednostňuje zabezpečení, soukromí a auditovatelnost.
Nulová závislost na cloudu
Veškeré zpracování probíhá lokálně ve vašem runtime. Deterministické parsery neprovádějí žádná síťová volání. Hybridní PDF pipeline používá Ollama pro lokální LLM inferenci — žádná data nejsou odesílána do cloudových API. XML parsery jsou explicitně nakonfigurovány s no_network=True, resolve_entities=False a load_dtd=False pro prevenci jakéhokoli odchozího přístupu.
Redakce PII
Osobně identifikovatelné informace (jména, IBANy, poštovní adresy) jsou automaticky redigovány ve výstupu CLI a režimu streamování. Toto je ve výchozím nastavení zapnuto.
- CLI: Citlivá pole se zobrazují jako
***REDACTED*** - Streaming:
parse_streaming(redact_pii=True)(výchozí) - Exporty: CSV/JSON/Excel uchovávají úplná data pro následné zpracování
- Zapnutí: Použijte
--show-piineboredact_pii=False, když potřebujete neredigovaný výstup
Zabezpečení XML (ochrana proti XXE)
Veškeré XML parsování používá lxml se zabezpečeným nastavením:
resolve_entities=False— zabraňuje útokům rozšířením XML entitno_network=True— blokuje veškerý odchozí síťový přístup z parseruload_dtd=False— zabraňuje útokům založeným na DTD- Odstranění jmenných prostorů před zpracováním — bezpečně zpracuje jakoukoli variantu CAMT.053
Zabezpečení ZIP archivů
iter_secure_xml_entries() validuje každý člen ZIP před extrakcí:
- Limit velikosti záznamu: 10 MB na záznam (konfigurovatelné)
- Celkový limit velikosti: 50 MB celkem nekomprimovaně (konfigurovatelné)
- Limit kompresního poměru: výchozí 100:1 — detekuje ZIP bomby
- Odmítnutí šifrovaných záznamů: Šifrované záznamy jsou přeskočeny s varováním
- Žádné zápisy na disk: XML bajty přecházejí přímo do parseru přes
from_bytes()
Prevence path traversal
Validace vstupu blokuje nebezpečné cesty k souborům:
- Nulové bajty, vzory procházení adresářů (
../) a symbolické odkazy jsou odmítnuty - Validace přípony souboru proti očekávaným formátům
- Limity velikosti souboru (100 MB výchozí, konfigurovatelné)
Ověření zůstatku (Golden Rule)
Každá PDF extrakce je ověřena rovnicí: opening balance + credits − debits == closing balance. Výsledky jsou označeny jako VERIFIED, DISCREPANCY nebo FAILED. Nesrovnalosti lze zkontrolovat interaktivně pomocí --type review.
Deterministický výstup
Pro strukturované formáty (CAMT, PAIN.001, CSV, OFX, QFX, MT940) při stejném vstupním souboru parser produkuje bajtově identický výstup při každém spuštění. Žádná náhodnost, žádná modelová inference, žádné heuristické vzorkování. To je klíčové pro:
- Reprodukovatelnost auditu: Spusťte stejný soubor dvakrát a porovnejte výstup
- Regulační compliance: Prokázání konzistentního zpracování
- Ověření v CI: 718 testů vynucuje determinismus se 100% pokrytím větví
Zabezpečení dodavatelského řetězce
- SHA-256 hash-locked závislosti: Každý balíček v
poetry.lockmá ověřené hash souborů - CycloneDX SBOM: Každé vydání obsahuje Software Bill of Materials
- Původ sestavení na GitHubu: Attestace spojuje každý artefakt s jeho zdrojovým commitem
- Podepsané commity: Všechny commity jsou SSH-podepsané a ověřené v CI
- Ověření závislostí:
scripts/verify_locked_hashes.pyvaliduje všechny hashe lokálně
Ověření lokálně
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