TL;DR: O Bank Statement Parser processa todos os dados localmente, redige PII por padrão, reforça a análise XML contra ataques XXE, roda LLMs localmente via Ollama e vem com dependências bloqueadas por hash SHA-256 e um CycloneDX SBOM.
Segurança por Design
O Bank Statement Parser foi feito para processar dados financeiros sensíveis. Cada decisão de design prioriza segurança, privacidade e auditabilidade.
Zero Dependência de Nuvem
Todo o processamento acontece localmente no seu runtime. Os parsers determinísticos fazem zero chamadas de rede. O pipeline híbrido de PDF usa Ollama para inferência LLM local — nenhum dado é enviado para APIs na nuvem. Os parsers XML são configurados explicitamente com no_network=True, resolve_entities=False e load_dtd=False para impedir qualquer acesso de saída.
Redação de PII
Informações de identificação pessoal (nomes, IBANs, endereços postais) são automaticamente redadas na saída CLI e no modo de streaming. Isso vem ativado por padrão.
- CLI: Campos sensíveis aparecem como
***REDACTED*** - Streaming:
parse_streaming(redact_pii=True)(padrão) - Exportações: CSV/JSON/Excel retêm dados completos para processamento posterior
- Opt-in: Use
--show-piiouredact_pii=Falsequando precisar de saída sem redação
Segurança XML (Proteção XXE)
Toda análise XML usa lxml com configurações reforçadas:
resolve_entities=False-- impede ataques de expansão de entidades XMLno_network=True-- bloqueia todo acesso de saída à rede no parserload_dtd=False-- impede ataques baseados em DTD- Remoção de namespace antes do processamento -- lida com qualquer variante CAMT.053 de forma segura
Segurança de Arquivos ZIP
iter_secure_xml_entries() valida cada membro ZIP antes da extração:
- Limite de tamanho de entrada: 10 MB por entrada (configurável)
- Limite de tamanho total: 50 MB total descomprimido (configurável)
- Limite de taxa de compressão: padrão 100:1 -- detecta ZIP bombs
- Rejeição de entradas criptografadas: Entradas criptografadas são ignoradas com aviso
- Sem gravação em disco: Bytes XML passam direto para o parser via
from_bytes()
Prevenção de Travessia de Caminho
A validação de entrada bloqueia caminhos de arquivo perigosos:
- Bytes nulos, padrões de travessia de diretório (
../) e links simbólicos são rejeitados - Validação de extensão de arquivo contra formatos esperados
- Limites de tamanho de arquivo (padrão 100 MB, configurável)
Verificação de Saldo (Golden Rule)
Toda extração de PDF é verificada com a equação: opening balance + credits − debits == closing balance. Os resultados são marcados como VERIFIED, DISCREPANCY ou FAILED. Discrepâncias podem ser revisadas interativamente com --type review.
Saída Determinística
Para formatos estruturados (CAMT, PAIN.001, CSV, OFX, QFX, MT940), dado o mesmo arquivo de entrada, o parser produz saída idêntica em bytes a cada execução. Sem aleatoriedade, sem inferência de modelo, sem amostragem heurística. Isso é essencial para:
- Reprodutibilidade de auditoria: Execute o mesmo arquivo duas vezes e compare a saída
- Conformidade regulatória: Demonstre processamento consistente
- Verificação de CI: 718 testes impõem determinismo com 100% de cobertura de ramificação
Segurança da Cadeia de Suprimentos
- Dependências bloqueadas por hash SHA-256: Cada pacote em
poetry.locktem hashes de arquivo verificados - CycloneDX SBOM: Cada versão inclui uma lista de materiais de software
- Procedência de build do GitHub: Atestado vincula cada artefato ao seu commit de origem
- Commits assinados: Todos os commits são assinados por SSH e verificados no CI
- Verificação de dependências:
scripts/verify_locked_hashes.pyvalida todos os hashes localmente
Verifique Localmente
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