This article is practical guidance, not legal advice. For your specific situation, check with your data protection officer, a lawyer, or the CNIL's published guidance.
The core problem
Under the GDPR, personal data does not stop being personal data because it is in a test environment. The same principles apply:
- Purpose limitation: data collected to fulfil orders was not collected so developers could test features.
- Data minimisation: you should use only the data you need. Testing a checkout flow rarely needs 40,000 real customers.
- Security: you must protect it appropriately, wherever it sits.
- Storage limitation: copies should not live forever.
- Accountability: you must be able to show how you handle it.
A staging server with a full production copy usually fails on most of these at once.
Step 1: Find where production data already leaks
Before fixing anything, look. Common places real data hides:
- Staging and test databases restored from backups
- Developer laptops, with local database dumps in download folders
- Shared drives and chat messages where someone shared an export or a screenshot
- Logs, which often contain emails, names, IP addresses and request bodies
- Error tracking and monitoring tools, which capture the data attached to each error
- Old backups and snapshots of test servers
- Analytics and support tools receiving events from a staging site that is wired to the real account
- Spreadsheets created for "a quick analysis"
- Third-party contractors' machines and accounts
List each place, who has access, and since when. This inventory is also what you need for your processing register. Pair it with a quick account ownership audit so you know which logins and tools actually reach each environment.
Step 2: Choose the right type of test data
You have four options, from safest to riskiest.
- Synthetic data (generated from scratch). Fake customers, orders and products generated by a script or library. Nothing links to a real person. This is the best default for development and automated tests.
- Anonymised data. Real data transformed so that people can no longer be identified, by anyone, by any reasonably available means. If it is truly anonymous, it falls outside the GDPR. This is a high bar and harder to reach than most people think (see below).
- Pseudonymised data. Identifiers replaced by codes or fake values, but re-identification is still possible, for example because the original is kept or because fields combine to identify someone. This is still personal data under the GDPR. It reduces risk but does not remove your obligations.
- Real production data. Only when strictly necessary, for a limited time, in a controlled environment with production-level security, and with a documented justification.
Step 3: Why "anonymised" is harder than it sounds
Replacing names with random ones is not enough. People can often be identified by combining remaining fields:
- A rare job title + a small town + a birth date
- A delivery address, even without a name
- Free-text fields: support messages, notes and comments contain names, phone numbers and health details
- Attachments: PDFs, invoices and images
- Unique behaviours: an order history that only one person has
- Timestamps and IDs that can be matched to other sources
- Rare values: the only customer in a country, or the only account over a certain size
A practical test: could someone with access to this data, plus other information they could plausibly obtain, single out an individual? If yes, treat it as personal data.
Do not call data "anonymised" in your documentation unless you have actually assessed this. "Pseudonymised" is often the honest label.
Step 4: Build a safe copy process, if you need real structure
Sometimes you need data shaped like production: volume, odd cases, edge cases. A safe pipeline:
- Restore a production backup into a locked-down, temporary environment (never straight to staging).
- Run a masking script that transforms the data before anyone else can access it.
- Verify the result with automated checks (see below).
- Publish the masked database to the test environments.
- Destroy the temporary copy.
What the masking script should do:
- Replace direct identifiers: names, emails, phone numbers, addresses, national IDs, bank details
- Use realistic fakes with a proper format, so validation and forms still work
- Keep referential integrity: the same customer must get the same fake identity everywhere. Deterministic generation (for example, deriving the fake value from a secret-keyed hash of the original ID) does this, but keep the secret protected, since weak hashing of small value sets can be reversed
- Scramble or clear free text and drop attachments
- Remove secrets: API keys, tokens, webhook URLs and password hashes
- Generalise sensitive fields such as birth dates (keep the year, or shift by a random offset) and exact locations
- Drop what tests do not need: old records, whole tables of sensitive data, archived history
Make the script a maintained part of your codebase. When someone adds a column with personal data, a rule in the checklist asks whether the masking script needs updating.
Review your test environments
We map where production data leaks, set up masking or synthetic data, and lock down staging without blocking your team.
Step 5: Neutralise the side effects
Test environments can act on real data. A copied database may contain real email addresses, phone numbers and live integration settings. Prevent:
- Real emails being sent. Route all outgoing mail to a catch-all tool (like MailHog or Mailpit) or an allowlist, and double-check that the setting cannot be accidentally turned off.
- Real SMS and notifications.
- Real payments. Use the provider's test mode and test keys only.
- Webhooks calling production systems, or marketing tools receiving fake signups.
- Scheduled jobs (reminders, invoices, newsletters) running against copied data.
- Analytics and tracking polluting your real dashboards.
Replace every production key and URL in the test configuration. A common rule: the test environment should be unable to talk to production credentials.
Step 6: Secure what remains
If, after all this, a test environment still contains real personal data, then it must be protected like production:
- Access limited to named people who need it, with strong authentication
- Not publicly reachable: no open staging URLs indexed by search engines
- Encryption at rest and in transit
- Logs and monitoring
- Documented retention: a deletion date
- Backups handled with the same care
- Included in your processing register and security review
"It is only staging" is not a defence. Several well-known breaches started with an exposed test server.
Step 7: Do not forget your suppliers and developers
- External developers and agencies who access personal data on your behalf are usually your processors, and you need a written agreement setting out what they can do (a data processing agreement under Article 28). Document expectations in your exit plan as well.
- Tools that receive your data (error tracking, logging platforms, support tools, AI services) are processors too. Check where the data goes, including transfers outside the EU, and configure scrubbing of personal data where possible.
- Contractors' own laptops: define what may be stored on them, and require deletion at the end of the engagement.
- Offboarding: remove access to test databases and dumps when people leave.
Step 8: Prepare for the day it goes wrong
If personal data in any environment is exposed, you may have to notify the supervisory authority (the CNIL in France) within 72 hours of becoming aware, when the breach is likely to create a risk to individuals, and possibly inform the people concerned. A test environment breach counts if real data was in it. Know in advance:
- Who decides whether it is a reportable breach
- Who contacts the authority
- Where your inventory and logs are, so you can say what was exposed
Have this written down before you need it.
What to put in your documentation
- Your processing register should mention test and development uses if real data is involved
- A short policy: "Production data is not copied to non-production environments except under procedure X"
- The masking procedure, with a date and an owner
- The list of environments, who has access, and what data each contains
- Retention periods for copies
- For new projects, a data protection impact assessment where the risk level requires it
Common mistakes
- Restoring a production backup to staging for convenience
- Calling pseudonymised data "anonymous"
- Leaving free-text fields and attachments untouched
- Forgetting logs, error trackers and analytics
- Test servers publicly accessible and indexed
- Real SMTP settings left in the test configuration
- Developers keeping local dumps indefinitely
- No agreement with the contractors who handle the data
- No owner for the masking script, so it quietly goes out of date
Quick audit
- I know every environment and what data it contains
- No test environment holds real personal data without a written justification
- A masking or synthetic-data process exists and is maintained
- Test environments cannot send real emails, SMS or payments
- Free text, attachments and secrets are handled in the masking
- Logs and error tracking do not capture personal data unnecessarily
- Contractors and tools handling data are covered by agreements
- Access to test data is limited, authenticated and reviewed
- Copies have a retention period and get deleted
- We know who to call and what to do within 72 hours of a breach
From accidental copies to a clear test-data policy
If staging already holds production data and you want a safe pipeline your team can keep using, write us.
Cet article est un guide pratique, pas un avis juridique. Pour votre situation, consultez votre délégué à la protection des données, un avocat, ou les fiches publiées par la CNIL.
Le problème de fond
Au sens du RGPD, des données personnelles ne cessent pas d'être personnelles parce qu'elles sont dans un environnement de test. Les mêmes principes s'appliquent:
- Finalité: les données collectées pour traiter des commandes ne l'ont pas été pour que des développeurs testent des fonctionnalités.
- Minimisation: vous ne devez utiliser que les données nécessaires. Tester un parcours de paiement exige rarement 40 000 vrais clients.
- Sécurité: vous devez les protéger de façon adaptée, où qu'elles se trouvent.
- Limitation de conservation: les copies ne doivent pas rester indéfiniment.
- Responsabilité: vous devez pouvoir montrer comment vous les traitez.
Un serveur de staging avec une copie intégrale de la production échoue souvent sur la plupart de ces points à la fois.
Étape 1: Repérer où la production fuit déjà
Avant de corriger, regardez. Endroits fréquents où des données réelles se cachent:
- Bases de staging ou de test restaurées depuis des sauvegardes
- Portables de développeurs, avec des dumps locaux dans les dossiers de téléchargement
- Partages réseau et messages de chat où quelqu'un a envoyé un export ou une capture
- Logs, qui contiennent souvent emails, noms, adresses IP et corps de requêtes
- Outils de suivi d'erreurs et de monitoring, qui capturent les données attachées à chaque incident
- Anciennes sauvegardes et snapshots de serveurs de test
- Outils d'analytics ou de support recevant des événements d'un site de staging branché sur le vrai compte
- Tableurs créés pour « une analyse rapide »
- Machines et comptes de prestataires externes
Listez chaque endroit, qui y a accès, et depuis quand. Cet inventaire sert aussi à votre registre des traitements. Croisez-le avec un audit rapide de propriété des comptes pour savoir quels accès et outils touchent réellement chaque environnement.
Étape 2: Choisir le bon type de données de test
Quatre options, de la plus sûre à la plus risquée.
- Données synthétiques (générées de zéro). Faux clients, commandes et produits produits par un script ou une bibliothèque. Aucun lien avec une personne réelle. Meilleur défaut pour le développement et les tests automatisés.
- Données anonymisées. Données réelles transformées pour qu'on ne puisse plus identifier les personnes, par quiconque, par des moyens raisonnablement disponibles. Si l'anonymisation est réelle, le RGPD ne s'applique plus. La barre est haute, plus qu'on ne le croit souvent (voir ci-dessous).
- Données pseudonymisées. Identifiants remplacés par des codes ou des valeurs fictives, mais la ré-identification reste possible, par exemple parce que l'original est conservé ou parce que des champs combinés identifient quelqu'un. Ce reste des données personnelles au sens du RGPD. Le risque baisse, pas vos obligations.
- Données de production réelles. Uniquement si strictement nécessaire, pour une durée limitée, dans un environnement maîtrisé avec une sécurité de niveau production, et avec une justification documentée.
Étape 3: Pourquoi « anonymisé » est plus dur qu'il n'y paraît
Remplacer les noms par des valeurs aléatoires ne suffit pas. On identifie souvent une personne en combinant ce qui reste:
- Un intitulé de poste rare + une petite ville + une date de naissance
- Une adresse de livraison, même sans nom
- Champs texte libre: messages support, notes et commentaires avec noms, téléphones et données de santé
- Pièces jointes: PDF, factures, images
- Comportements uniques: un historique de commandes qu'une seule personne possède
- Horodatages et identifiants recoupables avec d'autres sources
- Valeurs rares: le seul client d'un pays, ou le seul compte au-dessus d'un certain seuil
Test pratique: quelqu'un avec accès à ces données, plus d'autres informations qu'il pourrait obtenir de façon plausible, pourrait-il isoler un individu ? Si oui, traitez-les comme des données personnelles.
Ne qualifiez pas des données d'« anonymisées » dans votre documentation sans avoir fait cette analyse. « Pseudonymisées » est souvent l'étiquette honnête.
Étape 4: Construire une copie sûre, si vous avez besoin de la structure réelle
Parfois il faut des données en forme de production: volume, cas bizarres, cas limites. Pipeline sûr:
- Restaurer une sauvegarde de production dans un environnement temporaire verrouillé (jamais directement sur le staging).
- Exécuter un script de masquage qui transforme les données avant tout autre accès.
- Vérifier le résultat avec des contrôles automatisés (voir ci-dessous).
- Publier la base masquée vers les environnements de test.
- Détruire la copie temporaire.
Ce que le script de masquage doit faire:
- Remplacer les identifiants directs: noms, emails, téléphones, adresses, numéros nationaux, coordonnées bancaires
- Utiliser des faux réalistes au bon format, pour que validation et formulaires restent cohérents
- Préserver l'intégrité référentielle: un même client reçoit la même fausse identité partout. Une génération déterministe (par exemple dériver la fausse valeur d'un hash secret de l'identifiant d'origine) y aide, mais protégez le secret: un hash faible sur de petits jeux de valeurs peut être inversé
- Brouiller ou vider le texte libre et supprimer les pièces jointes
- Retirer les secrets: clés d'API, jetons, URLs de webhooks et hash de mots de passe
- Généraliser les champs sensibles comme les dates de naissance (garder l'année, ou décaler d'un offset aléatoire) et les localisations précises
- Retirer ce dont les tests n'ont pas besoin: vieux enregistrements, tables entières sensibles, historique archivé
Faites du script une partie maintenue du code. Quand quelqu'un ajoute une colonne avec des données personnelles, une règle dans la checklist demande si le script de masquage doit être mis à jour.
Revoir vos environnements de test
Nous cartographions les fuites de production, mettons en place masquage ou données synthétiques, et sécurisons le staging sans bloquer l'équipe.
Étape 5: Neutraliser les effets de bord
Un environnement de test peut agir sur des données réelles. Une base copiée peut contenir de vrais emails, numéros et réglages d'intégration actifs. Empêchez:
- L'envoi de vrais emails. Acheminez tout le courrier sortant vers un outil fourre-tout (MailHog, Mailpit) ou une liste blanche, et vérifiez que le réglage ne peut pas être réactivé par erreur.
- Les vrais SMS et notifications.
- Les vrais paiements. Mode test et clés de test du prestataire uniquement.
- Les webhooks vers la production, ou les outils marketing recevant de fausses inscriptions.
- Les tâches planifiées (rappels, factures, newsletters) sur des données copiées.
- Analytics et tracking qui polluent vos tableaux de bord réels.
Remplacez chaque clé et URL de production dans la configuration de test. Règle courante: l'environnement de test ne doit pas pouvoir utiliser les identifiants de production.
Étape 6: Sécuriser ce qui reste
S'il reste des données personnelles réelles après tout cela, l'environnement de test doit être protégé comme la production:
- Accès limité à des personnes nommées qui en ont besoin, avec une authentification forte
- Pas d'exposition publique: pas d'URL de staging ouverte indexée par les moteurs
- Chiffrement au repos et en transit
- Logs et monitoring
- Conservation documentée: une date de suppression
- Sauvegardes traitées avec le même soin
- Inclusion dans le registre des traitements et la revue de sécurité
« Ce n'est que du staging » n'est pas une défense. Plusieurs failles connues ont commencé par un serveur de test exposé.
Étape 7: Ne pas oublier prestataires et développeurs
- Les développeurs et agences externes qui accèdent à des données personnelles pour votre compte sont en général vos sous-traitants. Il vous faut un accord écrit sur ce qu'ils peuvent faire (accord de traitement au sens de l'article 28). Formalisez aussi les attentes dans votre plan de sortie.
- Les outils qui reçoivent vos données (suivi d'erreurs, logs, support, services d'IA) sont aussi des sous-traitants. Vérifiez où vont les données, y compris les transferts hors UE, et configurez l'effacement des données personnelles quand c'est possible.
- Portables des prestataires: définissez ce qui peut y être stocké, et exigez la suppression en fin de mission.
- Offboarding: retirez l'accès aux bases de test et aux dumps quand quelqu'un part.
Étape 8: Préparer le jour où ça se passe mal
Si des données personnelles sont exposées dans n'importe quel environnement, vous pouvez devoir notifier l'autorité de contrôle (la CNIL en France) sous 72 heures à partir du moment où vous en avez connaissance, lorsque la violation est susceptible d'engendrer un risque pour les personnes, et éventuellement informer les personnes concernées. Une faille sur un environnement de test compte si des données réelles s'y trouvaient. Sachez à l'avance:
- Qui décide si la violation est notifiable
- Qui contacte l'autorité
- Où se trouvent inventaire et logs, pour dire ce qui a été exposé
Écrivez cela avant d'en avoir besoin.
Ce qu'il faut documenter
- Le registre des traitements doit mentionner les usages test et développement si des données réelles sont impliquées
- Une courte politique: « Les données de production ne sont pas copiées hors production sauf selon la procédure X »
- La procédure de masquage, avec une date et un responsable
- La liste des environnements, qui y accède, et quelles données chacun contient
- Des durées de conservation pour les copies
- Pour les nouveaux projets, une analyse d'impact lorsque le niveau de risque l'exige
Erreurs fréquentes
- Restaurer une sauvegarde de production sur le staging par commodité
- Appeler « anonymes » des données pseudonymisées
- Laisser texte libre et pièces jointes intacts
- Oublier logs, outils d'erreurs et analytics
- Serveurs de test publics et indexés
- Réglages SMTP réels laissés en configuration de test
- Dumps locaux conservés indéfiniment par les développeurs
- Pas d'accord avec les prestataires qui manipulent les données
- Pas de responsable pour le script de masquage, qui vieillit en silence
Audit rapide
- Je connais chaque environnement et les données qu'il contient
- Aucun environnement de test ne détient de données personnelles réelles sans justification écrite
- Un processus de masquage ou de données synthétiques existe et est maintenu
- Les environnements de test ne peuvent pas envoyer de vrais emails, SMS ou paiements
- Texte libre, pièces jointes et secrets sont traités dans le masquage
- Logs et suivi d'erreurs ne capturent pas inutilement des données personnelles
- Prestataires et outils qui traitent les données sont couverts par des accords
- L'accès aux données de test est limité, authentifié et revu
- Les copies ont une durée de conservation et sont supprimées
- Nous savons qui appeler et quoi faire dans les 72 heures après une violation
Des copies accidentelles à une politique claire
Si le staging contient déjà de la production et que vous voulez un pipeline sûr que l'équipe peut tenir dans la durée, écrivez-nous.