Bezpieczeństwo

Jak chronimy Twoje dane finansowe

W skrócie: Bank Statement Parser przetwarza wszystkie dane lokalnie, domyślnie redaguje PII, wzmacnia parsowanie XML przed atakami XXE, uruchamia modele LLM lokalnie przez Ollama i jest dostarczany z zależnościami zablokowanymi hashem SHA-256 oraz CycloneDX SBOM.

Bezpieczeństwo w fazie projektowania

Bank Statement Parser jest stworzony do przetwarzania wrażliwych danych finansowych. Każda decyzja projektowa priorytetowo traktuje bezpieczeństwo, prywatność i możliwość audytu.

Zero zależności od chmury

Całe przetwarzanie odbywa się lokalnie w środowisku wykonawczym. Parsery deterministyczne nie wykonują żadnych połączeń sieciowych. Hybrydowy pipeline PDF używa Ollama do lokalnej inferencji LLM — żadne dane nie są wysyłane do chmurowych API. Parsery XML są jawnie skonfigurowane z no_network=True, resolve_entities=False i load_dtd=False, aby uniemożliwić jakikolwiek dostęp wychodzący.

Redakcja PII

Dane osobowe (nazwiska, numery IBAN, adresy pocztowe) są automatycznie redagowane w wynikach CLI i trybie streaming. Funkcja jest domyślnie włączona.

Bezpieczeństwo XML (ochrona XXE)

Wszystkie parsery XML używają lxml z zabezpieczonymi ustawieniami:

Bezpieczeństwo archiwów ZIP

iter_secure_xml_entries() sprawdza każdy element ZIP przed ekstrakcją:

Zapobieganie przechodzeniu ścieżek

Walidacja danych wejściowych blokuje niebezpieczne ścieżki plików:

Weryfikacja salda (Golden Rule)

Każda ekstrakcja PDF jest weryfikowana równaniem: opening balance + credits − debits == closing balance. Wyniki są oznaczane jako VERIFIED, DISCREPANCY lub FAILED. Rozbieżności można przeglądać interaktywnie za pomocą --type review.

Deterministyczne wyniki

Dla formatów strukturalnych (CAMT, PAIN.001, CSV, OFX, QFX, MT940) — przy tym samym pliku wejściowym parser generuje bajt po bajcie identyczne wyniki przy każdym uruchomieniu. Żadnej losowości, żadnej inferencji modelu, żadnego próbkowania heurystycznego. Ma to kluczowe znaczenie dla:

Bezpieczeństwo łańcucha dostaw

Weryfikacja lokalna

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