设计安全
银行对账单解析器专为处理敏感的财务数据而构建。每个设计决策都会优先考虑安全性、隐私性和可审核性。
零网络访问
所有处理都在运行时本地进行。该库进行零 API 调用、零云连接并收集零遥测数据。 XML 解析器显式配置为no_network=True, resolve_entities=False, 和load_dtd=False以防止任何出站访问。
PII 编辑
个人身份信息(姓名、IBAN、邮政地址)会在 CLI 输出和流模式下自动编辑。默认情况下此功能处于启用状态。
- CLI:敏感字段显示为
***REDACTED*** - 流媒体:
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 MB(可配置)
- 总大小上限:未压缩总计 50 MB(可配置)
- 压缩比限制:默认为 100:1 -- 检测 ZIP 炸弹
- 加密条目拒绝:跳过加密条目并发出警告
- 无磁盘写入:XML 字节通过直接传递到解析器
from_bytes()
路径遍历预防
输入验证阻止危险文件路径:
- 空字节,目录遍历模式(
../),并且符号链接被拒绝 - 针对预期格式的文件扩展名验证
- 文件大小限制(默认 100 MB,可配置)
确定性输出
给定相同的输入文件,解析器每次运行都会生成字节相同的输出。没有随机性,没有模型推理,没有启发式采样。这对于以下方面至关重要:
- 审核重现性:运行同一文件两次并比较输出
- 法规遵从性:展示一致的处理
- CI 验证:467 项测试强制执行确定性,分支覆盖率为 100%
供应链安全
- SHA-256 哈希锁定依赖项:中的每个包
poetry.lock已验证文件哈希值 - CycloneDX SBOM:每个版本都包含软件物料清单
- GitHub 构建来源:证明将每个工件链接到其源提交
- 签名提交:所有提交均经过 SSH 签名并在 CI 中进行验证
- 依赖关系验证:
scripts/verify_locked_hashes.py在本地验证所有哈希值
本地验证
python -m pytest # 467 tests, 100% branch coverage
python scripts/verify_locked_hashes.py # SHA-256 hash verification
git log --show-signature -1 # Verify commit signature