TL;DR: Pinoproseso ng Bank Statement Parser ang lahat ng data nang lokal, rine-redact ang PII bilang default, pinatitigas ang XML parsing laban sa mga XXE attack, pinapatakbo ang mga LLM nang lokal sa pamamagitan ng Ollama, at kasama ang SHA-256 hash-locked dependencies at CycloneDX SBOM.
Seguridad ayon sa Disenyo
Ang Bank Statement Parser ay binuo para sa pagproseso ng sensitibong data sa pananalapi. Ang bawat desisyon sa disenyo ay inuuna ang seguridad, privacy, at auditability.
Zero Cloud Dependency
Lahat ng pagproseso ay nangyayari nang lokal sa loob ng iyong runtime. Ang mga deterministikong parser ay gumagawa ng zero na tawag sa network. Ang hybrid PDF pipeline ay gumagamit ng Ollama para sa lokal na LLM inference — walang data na ipinapadala sa mga cloud API. Ang mga XML parser ay tahasang naka-configure gamit ang no_network=True, resolve_entities=False, at load_dtd=False upang maiwasan ang anumang papalabas na access.
PII Redaction
Ang personally identifiable information (mga pangalan, IBAN, mga postal address) ay awtomatikong rine-redact sa CLI output at streaming mode. Naka-on ito bilang default.
- CLI: Ang mga sensitibong field ay ipinapakita bilang
***REDACTED*** - Streaming:
parse_streaming(redact_pii=True)(default) - Mga Export: Ang CSV/JSON/Excel ay nagpapanatili ng buong data para sa downstream processing
- Opt-in: Gamitin ang
--show-piioredact_pii=Falsekapag kailangan mo ng hindi na-redact na output
XML Security (XXE Protection)
Lahat ng XML parsing ay gumagamit ng lxml na may hardened na setting:
resolve_entities=False-- pinipigilan ang mga XML entity expansion attackno_network=True-- hinaharangan ang lahat ng papalabas na network access mula sa parserload_dtd=False-- pinipigilan ang mga DTD-based na attack- Namespace stripping bago iproseso -- ligtas na pinangangasiwaan ang anumang CAMT.053 variant
ZIP Archive Security
Bineberipika ng iter_secure_xml_entries() ang bawat ZIP member bago ang extraction:
- Entry size cap: 10 MB bawat entry (nako-configure)
- Total size cap: 50 MB kabuuang uncompressed (nako-configure)
- Compression ratio limit: 100:1 default -- nakaka-detect ng mga ZIP bomb
- Encrypted entry rejection: Nilalaktawan ang mga encrypted entry na may babala
- Walang disk write: Ang mga XML byte ay direktang dumadaan sa parser sa pamamagitan ng
from_bytes()
Path Traversal Prevention
Hinaharangan ng input validation ang mga mapanganib na file path:
- Null bytes, directory traversal pattern (
../), at mga symlink ay tinatanggihan - File extension validation laban sa mga inaasahang format
- Mga file size limit (100 MB default, nako-configure)
Beripikasyon ng Balanse (Golden Rule)
Bawat PDF extraction ay bineberipika gamit ang equation: opening balance + credits − debits == closing balance. Ang mga resulta ay tina-tag bilang VERIFIED, DISCREPANCY, o FAILED. Ang mga diskrepansya ay maaaring suriin nang interactive gamit ang --type review.
Deterministikong Output
Para sa mga structured na format (CAMT, PAIN.001, CSV, OFX, QFX, MT940), sa parehong input file, ang parser ay gumagawa ng byte-identical na output sa bawat run. Walang randomness, walang model inference, walang heuristic sampling. Kritikal ito para sa:
- Audit reproducibility: Patakbuhin ang parehong file nang dalawang beses at i-diff ang output
- Regulatory compliance: Magpakita ng pare-parehong pagproseso
- CI verification: 718 na pagsubok ang nagpapatupad ng determinismo na may 100% branch coverage
Supply Chain Security
- SHA-256 hash-locked dependencies: Bawat package sa
poetry.lockay may na-verify na file hash - CycloneDX SBOM: Ang bawat release ay may kasamang Software Bill of Materials
- GitHub build provenance: Iniuugnay ng attestation ang bawat artifact sa source commit nito
- Signed commits: Lahat ng commit ay SSH-signed at na-verify sa CI
- Dependency verification: Bineberipika ng
scripts/verify_locked_hashes.pyang lahat ng hash nang lokal
I-verify nang Lokal
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