Guide pratique pour sécuriser l’import/export de données tout en respectant les exigences légales
1. Introduction
Dolibarr est un ERP / CRM open‑source très utilisé par les PME et les associations. Sa flexibilité repose en partie sur la possibilité d’échanger des données via des fichiers CSV (Comma‑Separated Values).
Dans un contexte de conformité (RGPD, PCI‑DSS, normes comptables, etc.), le CSV ne doit pas être considéré comme un simple « exchange format » : il devient un vecteur de traitement de données sensibles qui doit être sécurisé, traçable et audit‑friendly.
Cet article détaille :
- Les bonnes pratiques d’import/export CSV dans Dolibarr.
- Les exigences de conformité à prendre en compte.
- Les outils et mécanismes de sécurité intégrés ou à mettre en place.
- Un processus de contrôle continu pour garantir que chaque opération CSV reste conforme.
2. Pourquoi le CSV est un point sensible
| Risque | Description | Impact conformité |
|---|---|---|
| Injection de caractères | Des champs mal formatés (sauts de ligne, guillemets non escape) peuvent rompre le parsing. | Perte d’intégrité des données → erreurs de facturation, mauvaise comptabilité. |
| Escapage / décodage incorrect | Si les guillemets ou les virgules ne sont pas correctement traités, les données peuvent être interprétées différemment. | Violation du principe de “data accuracy”. |
| Contrôle d’accès | Un CSV partagé peut être lu/modifié par des personnes non autorisées. | Non‑conformité avec le principe du moindre privilège (RGPD Art. 5‑1.c). |
| Traçabilité perdue | L’import CSV ne laisse pas de log natif si aucune vérification n’est activée. | Difficulté à répondre aux exigences d’audit (ISO 27001, PCI‑DSS). |
| Mauvaise codification | Unicode, UTF‑8, ISO‑8859‑1 mal détectés → caractères corrompus. | Violation du droit à la confidentialité (RGPD Art. 5‑1.e). |
3. Méthode CSV orientée conformité
3.1. Pré‑édition du fichier CSV
| Étape | Action | Astuce de conformité |
|---|---|---|
| 1. Définir un schéma de colonnes | Créez un JSON ou un XSD décrivant chaque champ (nom, type, format, longueur maximale). | Permet la validation préalable (ex. : email doit contenir @). |
| 2. Utiliser un séparateur unique | Dolibarr accepte le ; (point‑virgule) en plus de la ,. Privilégiez ; pour éviter les confusions dans les champs contenant des virgules. |
Réduit les erreurs de parsing. |
| 3. Encadrer les champs texte | Tous les champs contenant des caractères spéciaux doivent être entourés de guillemets doubles ("). |
Conformité au RFC 4180. |
| 4. Escape des guillemets | Doublez les guillemets internes (""). |
Évite les ruptures de ligne. |
| 5. Codage | Enregistrez le fichier en UTF‑8 avec BOM ou UTF‑8 sans BOM selon la configuration de Dolibarr. | Garantit la compatibilité et évite les caractères “â”, “é” mal interprétés. |
| 6. Ajouter un header | La première ligne doit contenir les noms exacts des champs attendus par Dolibarr. | Permet l’automatisation du mapping. |
Exemple de ligne conforme > « `csv
"CustomerID","Name","Email","Country","VATNumber","CreationDate"
123,"Dupont Jean","jean.dupont@example.com","FR","FR123456789","2024-08-01"
3.2. Import dans Dolibarr
- Se connecter avec un compte admin disposant du droit Maintenance → Import CSV.
- Sélectionner le module cible (ex. : “Customers”, “Suppliers”, “Products”).
- Utiliser le bouton « Vérifier le format » :
- Dolibarr analyse la première ligne, détecte le séparateur, le nombre de colonnes et leurs types.
- Un rapport s’affiche (nombre de lignes valides / invalides).
- Activer l’option « Traiter les champs obligatoires » :
- Si un champ est manquant ou mal typé, l’import s’arrête et renvoie un tableau d’erreurs détaillé.
- Choisir le mode « Validate only » avant le « Run import ». Cela crée un log d’audit sans modifier les enregistrements.
Bonne pratique : ne jamais importer directement en production. Utilisez un environnement de test identique (même version de Dolibarr, même configuration de base de données).
3.3. Export CSV conforme
- Export via l’interface “Listes” → “Export CSV”.
- Activez l’option “Inclure les colonnes de meta‑données” (date d’export, utilisateur, hash SHA‑256 du fichier).
- Sauvegarder le fichier dans un répertoire protégé (permissions 750, propriétaire
www-dataou équivalent). - Générer un fichier de checksum (ex. :
file.csv.sha256) pour chaque export et le versionner.
4. Conformité légale et technique
| Norma / Règlement | Point à couvrir avec le CSV | Méthode Dolibarr |
|---|---|---|
| RGPD (Art. 32 & 5) | Confidentialité et intégrité des données à caractère personnel. | – Utiliser TLS/HTTPS pour tout transfert de CSV. – Stellar audit : conserver le hash du fichier et la liste des comptes qui ont effectué l’import/export. |
| PCI‑DSS v4.0 | Ne pas stocker de données de carte de paiement via CSV. | – Désactiver l’export des champs “CardNumber”, “CVC”. – Si nécessaire, crypter les colonnes sensibles (ex. column‑encryption plugin). |
| ISO 27001 – A.8.16 | Contrôle de la transmission des données. | – Activer l’option Log CSV Export (module “Advanced Parameters → CSV Security”). |
| Norme comptable locale (ex. Plan Comptable Français) | Fichiers d’écriture comptable (ex. “Journal”). | – Exporter uniquement au format CSV « Legacy » et vérifier les contrôles de somme (débit/credit = 0). |
| GDPR‑right to be forgotten | Suppression ou masquage de données personnelles. | – Utiliser le wizard de masse (Maintenance → Bulk delete) plutôt que le CSV brut. Si necessity d’export, faire suivre par un script qui supprime immédiatement les lignes contenant l’identifiant concerné. |
Checklist de conformité (à valider avant chaque import/export CSV)
- [ ] Le fichier est compressé (
.gzou.zip) si > 10 Mo pour limiter la surface d’attaque.- [ ] Le fichier porte un nom de version (ex.
customers_2024-10-15_v01.csv).- [ ] Un checksum (SHA‑256) est généré et stocké dans le audit log.
- [ ] Les droits d’accès au fichier sont limités (chmod 640, propriétaire
dolibarr).- [ ] Le processus d’import est exécuté avec un compte limité (ex.
csv_importer) disposant uniquement du droit “Import customers”.- [ ] Un rapport d’audit (CSV‑audit‑YYYYMMDD.pdf) est archivé pendant au moins 5 ans.
5. Sécurisation technique du workflow CSV
5.1. Configuration serveur
| Paramètre | Valeur recommandée | Justification |
|---|---|---|
open_basedir |
/var/www/dolibarr:/tmp |
Limite les répertoires que PHP peut lire/écrire. |
file_uploads |
On avec upload_max_filesize = 20M |
Autorise des fichiers CSV volumineux sans dépasser la limite. |
session.cookie_httponly |
1 |
Empêche le vol de session via JavaScript. |
session.use_strict_mode |
1 |
Empêche la utilisation de session IDs fabriqués. |
disable_functions |
exec,passthru,shell_exec, phpinfo (hors modules indispensables) |
Réduit la surface d’attaque si le compte Dolibarr a des droits élevés. |
5.2. Utilisation d’extensions de sécurité
| Extension | Fonction | Mode d’emploi |
|---|---|---|
phpseclib (intégré dans le module Advanced Security) |
Chiffrement AES‑256‑CBC des colonnes sensibles (ex. numéro de SIRET). | Dans Maintenance → Settings → CSV Encryption, activer “Encrypt fields marked as confidential”. |
modsecurity (Apache) |
Règles OWASP CRS 9.9 – “CSV Injection” | Ajouter la règle SecRule REQUEST_HEADERS:User-Agent "@rx ^DolibarrCSVImport$" "id:1001,phase:1,deny,log,status:403" pour bloquer les User‑Agents non‑conformes. |
fail2ban |
Détection d’erreurs répétées d’import (ex. CSV malformed) | Créer un filtre dolibarr-csv.conf qui bannit les IP après 5 tentatives d’erreur en 10 min. |
5.3. Processus de vérification automatisée Un script shell (ou un job cron) peut être mis en place :
#!/bin/bash
CSV_DIR="/var/www/dolibarr/docs/csv"
LOG="/var/log/dolibarr/csv_audit.log"
for f in $(find "$CSV_DIR" -name "*.csv"); do
# 1. Vérifier le checksum déjà stocké
SHA256=$(sha256sum "$f" | cut -d' ' -f1)
if ! grep -q "$(basename "$f") $SHA256" /var/lib/dolibarr/csv_checksums; then
echo "$(date) - UNKNOWN FILE $f" >> "$LOG"
continue fi
# 2. Vérifier la permission
PERM=$(stat -c "%a" "$f")
if [ "$PERM" -gt 640 ]; then
echo "$(date) - PERM ERROR $f ($PERM)" >> "$LOG"
chmod 640 "$f"
fi
# 3. Lancer la validation (Dolibarr CLI)
php /var/www/dolibarr/htdocs/scripts/csv_validator.php "$f"
# 4. Archiver le résultat
mv "$f" "/archives/csv/$f-$(date +%Y%m%d).csv"
done
Résultat : chaque fichier CSV passe par un triptyque checksum → permission → validation.
6. Cas d’usage typiques
| Cas | Description | Solution CSV conforme |
|---|---|---|
| Import de nouveaux clients | 500 rows à charger chaque mois depuis un partenaire. | 1️⃣ Fichier customers_YYYYMMDD_v02.csv 2️⃣ Enumération pré‑validation (format email, TVA) 3️⃣ Import avec mode Validate only → log → Run 4️⃣ Rapport PDF archivé 5 ans. |
| Export des factures pour audit externe | Besoin d’envoyer chaque mois un CSV contenant les montants TTC. | 1️⃣ Export via « Export CSV » avec inclure les métadonnées (date, utilisateur, hash). 2️⃣ Chiffrer le fichier avec gpg --symmetric (passphrase stockée dans le coffre-fort du DPO). 3️⃣ Transférer via SFTP avec clé RSA autorisée. |
| Masquage GDPR “right to be forgotten” | Supprimer le numéro de client 123456 du tableau. | 1️⃣ Créer un CSV contenant uniquement l’ID à exclure. 2️⃣ Utiliser le script bulk-delete qui supprime les lignes où CustomerID = 123456 avant l’export. 3️⃣ Re‑générer un nouveau CSV avec checksum mis à jour. |
7. Checklist finale – « CSV‑Ready »
| ✅ | Action à valider |
|---|---|
| 1 | Le fichier CSV possède header exact, séparateur choisi, et tous les champs texte sont entourés de guillemets. |
| 2 | Le fichier est UTF‑8 (ou UTF‑8 + BOM) et a été testé avec file -i. |
| 3 | Un hash (SHA‑256) a été calculé et enregistré dans le journal d’audit. |
| 4 | Les droits du fichier sont 640 (lecture pour le groupe, écriture uniquement pour le propriétaire). |
| 5 | Le modèle de colonnes respecte le schéma métier (type, longueur, contraintes). |
| 6 | La validation Dolibarr (bouton “Check format”) renvoie 0 erreurs avant l’import. |
| 7 | Le processus d’import est réalisé avec un compte dédié (principe du moindre privilège). |
| 8 | Un rapport d’audit (PDF + log CSV) est archivé au moins 5 ans. |
| 9 | Si des données sensibles sont présentes, elles sont chiffrées ou pseudonymisées avant d’être exportées. |
| 10 | Les transfert (SFTP, HTTPS) utilisent TLS 1.2+ et des clés RSA ou ECDSA configurées par l’administrateur. |
8. Conclusion
La méthode CSV dans Dolibarr ne doit pas être perçue comme un simple format de fichier ; c’est un actif de conformité qui, s’il est traité correctement, permet d’assurer :
- L’intégrité des données (validation stricte, checksum, log).
- La traçabilité (audit trail, versioning, checksum).
- La conformité aux exigences légales (RGPD, PCI‑DSS, ISO 27001). – La sécurité (restriction d’accès, chiffrement, contrôle de serveur).
En suivant la procédure décrite — pré‑édition conforme, validation avant import, journalisation et archivage, et contrôles automatisés — les organisations peuvent exploiter la flexibilité de Dolibarr tout en respectant les standards les plus stricts de gouvernance des données.
Prochaine étape : intégrer ce workflow dans votre plan de gestion de la conformité et le former à vos équipes (admin, comptabilité, IT). Un petit atelier de 2 h suffit généralement pour passer d’un usage “ad‑hoc” à un processus certifié « CSV‑Secure ».
Ce document a été rédigé pour les équipes IT/DPO qui souhaitent mettre en place une gouvernance solide autour des échanges CSV dans Dolibarr.