Pourquoi un simple module de traduction automatique installé sur un site vitrine multilingue déclenchait-il des appels sortants vers un domaine hébergé en Californie, à chaque enregistrement de brouillon ? C’est la question qui a lancé cet audit, réalisé pour une PME du secteur agroalimentaire qui traduisait ses fiches produits du français vers l’allemand et l’italien via une extension populaire du répertoire WordPress.org.
Le module en question proposait une traduction automatique « assistée par IA » directement dans l’éditeur de blocs. Séduisant sur le papier : un clic, et le texte apparaît traduit dans la langue cible. En coulisses, chaque paragraphe rédigé, y compris les brouillons jamais publiés, transitait par une API tierce hébergée hors de l’Union européenne, sans que la documentation du plugin ne mentionne explicitement cette destination ni la base légale justifiant ce transfert.
Symptôme : des appels sortants inexpliqués dans les journaux réseau
L’alerte est venue d’un simple contrôle de sécurité périmétrique : le pare-feu applicatif de l’hébergeur signalait des requêtes sortantes régulières vers un domaine inconnu, à chaque sauvegarde automatique d’un brouillon dans l’éditeur. Aucune de ces requêtes n’apparaissait dans la documentation publique du plugin, qui se contentait de promettre une « traduction intelligente en un clic ».
Un examen du code source de l’extension, téléchargée directement depuis le répertoire officiel, a confirmé l’origine : une fonction accrochée au hook save_post envoyait le contenu du champ post_content vers une API externe dès que le statut du brouillon changeait, y compris pour du contenu non destiné à la publication.
Diagnostic : un transfert de données sans base légale identifiable
Le règlement général sur la protection des données encadre strictement le transfert de données personnelles hors de l’Union européenne. Or les fiches produits contenaient parfois des informations sur des partenaires commerciaux nommément identifiés, ce qui suffit à qualifier le contenu de donnée à caractère personnel au sens du RGPD. Le plugin ne proposait :

- ni clauses contractuelles types référencées dans sa documentation,
- ni mention d’une décision d’adéquation de la Commission européenne concernant le pays de destination,
- ni option de configuration pour restreindre le traitement à un sous-ensemble de contenus.
Sans base légale identifiable, ce transfert exposait l’éditeur du site à un manquement au chapitre V du RGPD, indépendamment de la qualité de la traduction produite en sortie.
Correctif : bascule vers un service de traduction hébergé en Europe
La correction a consisté à désactiver l’extension incriminée et à la remplacer par un service de traduction dont l’infrastructure de traitement est explicitement localisée dans l’Union européenne, avec une documentation précisant le sous-traitant, sa localisation et la durée de conservation des textes soumis. Le remplacement s’est fait via l’API REST du nouveau service, appelée depuis une extension maison légère :
add_action( 'rest_api_init', function () {
register_rest_route( 'site/v1', '/traduire', array(
'methods' => 'POST',
'callback' => 'site_traduire_contenu',
'permission_callback' => function () {
return current_user_can( 'edit_posts' );
},
) );
} );
Cette approche a permis de conserver la fonctionnalité de traduction assistée tout en documentant précisément, pour le registre des traitements, le sous-traitant retenu et la localisation exacte du stockage temporaire des textes envoyés.
Prévention : documenter les flux avant d’adopter une extension
L’incident aurait pu être évité par une lecture attentive de la politique de confidentialité du plugin avant son installation, ou à défaut par une inspection rapide du code recherchant les appels à wp_remote_post et les domaines de destination associés. Une règle simple s’est imposée depuis pour toute nouvelle extension touchant à du contenu éditorial : aucune activation en production sans identification préalable de la localisation des services tiers sollicités.
Un tableau de suivi interne recense désormais, pour chaque extension connectée à un service externe, le pays d’hébergement du traitement et la base légale associée. Ce document, mis à jour à chaque changement de version d’une extension concernée, sert de point d’entrée lors des audits RGPD suivants.
Une extension qui « traduit en un clic » sans jamais préciser où passe le texte n’est pas un outil pratique : c’est une inconnue qu’on installe sans le savoir dans son registre des traitements.
Notre verdict
La qualité linguistique d’une traduction automatique ne dit rien de la conformité du service qui la produit. Ce cas illustre un piège fréquent avec les extensions qui promettent un traitement « intelligent » : la fonctionnalité visible masque un flux de données qu’il faut activement chercher à documenter. Avant d’adopter un module de traduction, mieux vaut consacrer dix minutes à vérifier la localisation du traitement plutôt que de découvrir, des mois plus tard, un transfert hors UE sans base légale dans les journaux réseau.