# Sécuriser les exports RGPD d’un site associatif de 300 structures

> Un export de données personnelles demandé par un adhérent ne doit contenir que les données de son association, jamais celles des 299 autres structures de l'instance mutualisée.

- Auteur : WordPress Développement
- Publié le : 2024-06-20
- Mis à jour le : 2024-06-20
- Catégorie : Sécurité
- URL : https://www.wpmoderne.fr/securite/securiser-exports-rgpd-site-associatif-300-structures/

## L’essentiel

- Un export RGPD doit être filtré par structure sur une instance mutualisée
- Vérifier l'appartenance avant d'inclure toute donnée, jamais après
- Consigner chaque export effectué facilite la preuve de conformité

Un adhérent d'une association locale exerce son droit d'accès aux données personnelles le concernant, hébergées sur une plateforme mutualisée qui regroupe trois cents structures associatives distinctes sur une même instance WordPress. La demande semble simple en apparence : générer un export contenant les informations que l'association détient sur cette personne. Le risque, sur ce type d'architecture mutualisée, est que l'export généré déborde du périmètre de la seule association concernée et inclue, par erreur de filtrage, des données appartenant à d'autres structures du réseau.

Cette checklist a été construite après un audit préventif mené sur ce type de plateforme, avant qu'un incident réel ne survienne, précisément parce que le risque de mélange de données entre structures indépendantes d'une même instance mutualisée est structurel et mérite d'être traité en amont plutôt qu'après un signalement.

## Pourquoi le risque de mélange existe sur ce type d'architecture

La plateforme reposait sur une architecture multisite WordPress, chaque association disposant de son propre sous-site, mais avec une base de données d'adhérents parfois centralisée pour faciliter certaines fonctionnalités transverses, comme un annuaire fédéral consultable par les structures membres. Cette centralisation partielle, utile fonctionnellement, complique la question du filtrage au moment d'un export RGPD individuel :

- Un adhérent peut être membre de plusieurs associations du réseau sans que cela soit toujours apparent dans le code d'export.
- Une requête d'export mal filtrée sur l'identifiant de site peut remonter des données au niveau du réseau entier plutôt que du seul sous-site concerné.
- Un développeur qui ajoute un nouveau champ de données personnelle peut oublier de le rattacher explicitement à la logique de filtrage par structure.

## Checklist de vérification avant tout export

> L'essentiel à retenir : Un export RGPD doit être filtré par structure sur une instance mutualisée ; Vérifier l'appartenance avant d'inclure toute donnée, jamais après ; Consigner chaque export effectué facilite la preuve de conformité

1. **Identifier explicitement le périmètre de la demande** : quelle association précise, quel sous-site du réseau, est concerné par cette demande de droit d'accès.
2. **Vérifier l'appartenance de chaque donnée avant inclusion**, jamais après génération de l'export complet suivi d'un filtrage a posteriori qui laisserait place à l'erreur.
3. **Tester l'export sur un compte de test appartenant à deux structures différentes**, pour vérifier explicitement qu'aucune fuite croisée ne se produit sur ce cas limite réaliste.
4. **Exclure par défaut les données de l'annuaire fédéral** de l'export individuel d'une structure, sauf si la demande porte explicitement sur ce périmètre transverse.
5. **Consigner chaque export effectué**, avec la date, le périmètre couvert et l'identité du destinataire, pour disposer d'une preuve de conformité en cas de contrôle.

### Le filtrage technique retenu

```
function generer_export_rgpd_adherent( $adherent_id, $structure_id ) {
    global $wpdb;

    $donnees = $wpdb->get_results( $wpdb->prepare(
        "SELECT * FROM {$wpdb->prefix}adherents_donnees
         WHERE adherent_id = %d AND structure_id = %d",
        $adherent_id,
        $structure_id
    ), ARRAY_A );

    if ( empty( $donnees ) ) {
        return new WP_Error( 'aucune_donnee', 'Aucune donnée trouvée pour cette structure précise.' );
    }

    foreach ( $donnees as &$ligne ) {
        if ( (int) $ligne['structure_id'] !== (int) $structure_id ) {
            // garde-fou supplémentaire : ne devrait jamais se produire vu la requête, mais vérifié explicitement
            return new WP_Error( 'incoherence_structure', 'Export interrompu par sécurité.' );
        }
    }

    return $donnees;
}
```

Le filtrage par `structure_id` intervient directement dans la requête SQL, plutôt qu'en filtrant après coup un résultat plus large. Le garde-fou supplémentaire dans la boucle, redondant en apparence puisque la requête filtre déjà, est volontairement conservé : il agit comme une seconde vérification qui interromprait l'export si une évolution future du code introduisait, par erreur, une requête moins bien filtrée à cet endroit précis.

## Encadrer aussi l'export multi-structures d'un même adhérent

Quand un adhérent appartient légitimement à plusieurs associations du réseau et demande un export global de toutes ses données, chaque structure concernée doit être identifiée séparément et l'export doit clairement délimiter, section par section, quelle donnée appartient à quelle association. Cette présentation cloisonnée, même au sein d'un même document remis au demandeur, évite toute ambiguïté sur l'origine et la portée de chaque information transmise.

## Documenter la procédure pour les futures demandes

Au-delà du correctif technique, la checklist a été formalisée dans une procédure écrite, remise à chaque nouvelle structure rejoignant le réseau, précisant qui traite les demandes de droit d'accès, dans quel délai, et selon quel processus de vérification avant envoi. Cette formalisation réduit la dépendance à la mémoire individuelle d'un développeur ou d'un salarié fédéral pour appliquer correctement le filtrage à chaque nouvelle demande.

> Sur une instance mutualisée, chaque export de données personnelles doit être pensé comme s'il allait être audité structure par structure, jamais comme une opération globale simplifiée par commodité technique.

## En résumé

Le risque de mélange de données entre structures indépendantes d'une même instance mutualisée n'est pas théorique : il découle directement des choix d'architecture qui facilitent par ailleurs la gestion technique du réseau. Un filtrage systématique au niveau de la requête, doublé d'une vérification explicite et d'une procédure documentée, permet de répondre correctement aux demandes de droit d'accès sans jamais faire porter à un adhérent le risque d'une fuite croisée entre associations du réseau.
