Коротко: Bank Statement Parser обробляє всі дані локально, приховує персональні дані за замовчуванням, захищає XML-аналіз від XXE-атак, запускає LLM локально через Ollama та постачається із SHA-256 hash-блокованими залежностями і CycloneDX SBOM.
Безпека за дизайном
Bank Statement Parser створений для обробки конфіденційних фінансових даних. Кожне архітектурне рішення ставить безпеку, конфіденційність та перевірюваність на перше місце.
Нульова залежність від хмари
Уся обробка відбувається локально у вашому середовищі виконання. Детерміністичні парсери не здійснюють жодних мережевих викликів. Гібридний PDF pipeline використовує Ollama для локального LLM-виведення — жодні дані не надсилаються до хмарних API. XML-парсери явно налаштовані з no_network=True, resolve_entities=False та load_dtd=False для запобігання будь-якому вихідному доступу.
Приховування персональних даних
Персональна інформація (імена, IBAN, поштові адреси) автоматично приховується у CLI та streaming-режимі. Це увімкнено за замовчуванням.
- CLI: Конфіденційні поля відображаються як
***REDACTED*** - Streaming:
parse_streaming(redact_pii=True)(за замовчуванням) - Експорт: CSV/JSON/Excel зберігають повні дані для подальшої обробки
- Увімкнення: Використовуйте
--show-piiабоredact_pii=False, коли потрібен повний вивід
Безпека XML (захист від XXE)
Увесь XML-аналіз використовує lxml із захищеними налаштуваннями:
resolve_entities=False-- запобігає атакам розширення XML-сутностейno_network=True-- блокує весь вихідний мережевий доступ парсераload_dtd=False-- запобігає атакам на основі DTD- Видалення просторів імен перед обробкою -- безпечно працює з будь-яким варіантом CAMT.053
Безпека ZIP-архівів
iter_secure_xml_entries() перевіряє кожний запис ZIP перед витягуванням:
- Ліміт розміру запису: 10 МБ на запис (налаштовується)
- Ліміт загального розміру: 50 МБ нестиснутих даних (налаштовується)
- Обмеження коефіцієнта стиснення: 100:1 за замовчуванням -- виявляє ZIP-бомби
- Відхилення зашифрованих записів: Зашифровані записи пропускаються з попередженням
- Без записів на диск: XML-байти передаються напряму до парсера через
from_bytes()
Захист від обходу шляхів
Валідація вхідних даних блокує небезпечні шляхи до файлів:
- Нульові байти, шаблони обходу каталогу (
../) та символічні посилання відхиляються - Перевірка розширення файлу щодо очікуваних форматів
- Ліміти розміру файлу (100 МБ за замовчуванням, налаштовується)
Перевірка балансу (Золоте правило)
Кожне PDF-витягування перевіряється рівнянням: opening balance + credits − debits == closing balance. Результати позначаються як VERIFIED, DISCREPANCY або FAILED. Розбіжності можна переглянути інтерактивно через --type review.
Детерміністичний результат
Для структурованих форматів (CAMT, PAIN.001, CSV, OFX, QFX, MT940) за умови однакового вхідного файлу парсер щоразу видає побайтово ідентичний результат. Без випадковості, без моделювання, без евристичної вибірки. Це критично для:
- Відтворюваність аудиту: Запустіть один файл двічі та порівняйте результати
- Регуляторний комплаєнс: Демонстрація стабільної обробки
- Перевірка в CI: 718 тестів забезпечують детермінізм зі 100% покриттям гілок
Безпека ланцюга постачань
- Залежності із SHA-256 hash-блокуванням: Кожний пакет у
poetry.lockмає перевірені hash файлів - CycloneDX SBOM: Кожний реліз містить Software Bill of Materials
- Походження збірки GitHub: Атестація зв’язує кожний артефакт із його вихідним комітом
- Підписані коміти: Усі коміти підписані SSH та перевірені в CI
- Перевірка залежностей:
scripts/verify_locked_hashes.pyперевіряє всі hash локально
Перевірте локально
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