Sécurité

Comment nous protégeons vos données financières

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.

Sécurité XML (protection XXE)

Toute l'analyse XML utilise lxml avec des paramètres durcis :

Sécurité des archives ZIP

iter_secure_xml_entries() valide chaque membre ZIP avant l'extraction :

Prévention de la traversée de chemin

La validation des entrées bloque les chemins de fichiers dangereux :

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 :

Sécurité de la chaîne d'approvisionnement

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