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.
- CLI: Wrażliwe pola wyświetlane są jako
***REDACTED*** - Streaming:
parse_streaming(redact_pii=True)(domyślnie) - Eksporty: CSV/JSON/Excel zachowują pełne dane do dalszego przetwarzania
- Włączenie: Użyj
--show-piilubredact_pii=False, gdy potrzebujesz niezredagowanych wyników
Bezpieczeństwo XML (ochrona XXE)
Wszystkie parsery XML używają lxml z zabezpieczonymi ustawieniami:
resolve_entities=False-- zapobiega atakom rozszerzania encji XMLno_network=True-- blokuje cały wychodzący dostęp sieciowy parseraload_dtd=False-- zapobiega atakom opartym na DTD- Usuwanie przestrzeni nazw przed przetwarzaniem -- bezpiecznie obsługuje każdy wariant CAMT.053
Bezpieczeństwo archiwów ZIP
iter_secure_xml_entries() sprawdza każdy element ZIP przed ekstrakcją:
- Limit rozmiaru wpisu: 10 MB na wpis (konfigurowalne)
- Limit całkowitego rozmiaru: 50 MB nieskompresowanego łącznie (konfigurowalne)
- Limit współczynnika kompresji: domyślnie 100:1 -- wykrywa bomby ZIP
- Odrzucanie wpisów zaszyfrowanych: Wpisy zaszyfrowane są pomijane z ostrzeżeniem
- Brak zapisu na dysku: Bajty XML przesyłane są bezpośrednio do parsera przez
from_bytes()
Zapobieganie przechodzeniu ścieżek
Walidacja danych wejściowych blokuje niebezpieczne ścieżki plików:
- Bajty zerowe, wzorce przechodzenia katalogów (
../) i dowiązania symboliczne są odrzucane - Walidacja rozszerzeń plików względem oczekiwanych formatów
- Limity rozmiaru plików (domyślnie 100 MB, konfigurowalne)
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:
- Powtarzalność audytu: Uruchom ten sam plik dwa razy i porównaj wyniki
- Zgodność z przepisami: Wykazanie spójnego przetwarzania
- Weryfikacja CI: 718 testów wymusza determinizm przy 100% pokryciu gałęzi
Bezpieczeństwo łańcucha dostaw
- Zależności zablokowane hashem SHA-256: Każdy pakiet w
poetry.lockma zweryfikowane skróty plików - CycloneDX SBOM: Każde wydanie zawiera zestawienie materiałów oprogramowania
- Pochodzenie kompilacji GitHub: Poświadczenie łączy każdy artefakt z jego commit źródłowym
- Podpisane commity: Wszystkie commity są podpisane SSH i weryfikowane w CI
- Weryfikacja zależności:
scripts/verify_locked_hashes.pysprawdza wszystkie skróty lokalnie
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