En bref : Bank Statement Parser traite toutes les données localement, masque les données personnelles par défaut, durcit l'analyse XML contre les attaques XXE, exécute les LLM localement via Ollama et livre des dépendances verrouillées par hash SHA-256 avec un SBOM CycloneDX.
Sécurité par conception
Bank Statement Parser est conçu pour traiter des données financières sensibles. Chaque décision de conception privilégie la sécurité, la confidentialité et l'auditabilité.
Zéro dépendance cloud
Tout le traitement s'effectue localement dans votre environnement d'exécution. Les analyseurs déterministes ne font aucun appel réseau. Le pipeline PDF hybride utilise Ollama pour l'inférence LLM locale — aucune donnée n'est envoyée vers des API cloud. Les analyseurs XML sont explicitement configurés avec no_network=True, resolve_entities=False et load_dtd=False pour bloquer tout accès sortant.
Masquage des données personnelles
Les informations personnellement identifiables (noms, IBAN, adresses postales) sont automatiquement masquées dans la sortie CLI et le mode streaming. Cette protection est activée par défaut.
- CLI : les champs sensibles affichent
***REDACTED*** - Streaming :
parse_streaming(redact_pii=True)(par défaut) - Exports : CSV/JSON/Excel conservent les données complètes pour le traitement en aval
- Affichage complet : utilisez
--show-piiouredact_pii=Falsequand vous avez besoin de la sortie non masquée
Sécurité XML (protection XXE)
Toute l'analyse XML utilise lxml avec des paramètres durcis :
resolve_entities=False-- empêche les attaques par expansion d'entités XMLno_network=True-- bloque tout accès réseau sortant depuis l'analyseurload_dtd=False-- empêche les attaques basées sur les DTD- Suppression des espaces de noms avant traitement -- gère toute variante CAMT.053 en toute sécurité
Sécurité des archives ZIP
iter_secure_xml_entries() valide chaque membre ZIP avant l'extraction :
- Plafond de taille d'entrée : 10 Mo par entrée (configurable)
- Plafond de taille totale : 50 Mo décompressés au total (configurable)
- Limite de taux de compression : 100:1 par défaut -- détecte les ZIP bombs
- Rejet des entrées chiffrées : les entrées chiffrées sont ignorées avec un avertissement
- Aucune écriture sur le disque : les octets XML passent directement à l'analyseur via
from_bytes()
Prévention de la traversée de chemin
La validation des entrées bloque les chemins de fichiers dangereux :
- Les octets nuls, les motifs de traversée de répertoire (
../) et les liens symboliques sont rejetés - Validation de l'extension de fichier par rapport aux formats attendus
- Limites de taille de fichier (100 Mo par défaut, configurable)
Vérification du solde (Règle d'or)
Chaque extraction PDF est vérifiée avec l'équation : opening balance + credits − debits == closing balance. Les résultats sont étiquetés VERIFIED, DISCREPANCY ou FAILED. Les écarts peuvent être revus de manière interactive avec --type review.
Sortie déterministe
Pour les formats structurés (CAMT, PAIN.001, CSV, OFX, QFX, MT940), pour un même fichier d'entrée, l'analyseur produit une sortie identique octet par octet à chaque exécution. Pas de hasard, pas d'inférence de modèle, pas d'échantillonnage heuristique. Cela est essentiel pour :
- Reproductibilité des audits : exécutez le même fichier deux fois et comparez la sortie
- Conformité réglementaire : démontrez un traitement cohérent
- Vérification CI : 718 tests imposent le déterminisme avec 100 % de couverture de branches
Sécurité de la chaîne d'approvisionnement
- Dépendances verrouillées par hash SHA-256 : chaque package dans
poetry.locka des hash de fichiers vérifiés - SBOM CycloneDX : chaque version inclut une nomenclature logicielle
- Provenance de build GitHub : l'attestation relie chaque artefact à son commit source
- Commits signés : tous les commits sont signés par SSH et vérifiés en CI
- Vérification des dépendances :
scripts/verify_locked_hashes.pyvalide tous les hash localement
Vérifiez localement
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