Skip to content
Learni
Voir tous les tutoriels
Sécurité et Conformité

Comment automatiser la rédaction de PII en production 2026

Read in English

Introduction

La rédaction des PII (Personally Identifiable Information) est devenue obligatoire pour toute application manipulant des données personnelles en 2026. Ce tutoriel expert vous guide pas à pas dans la construction d'un système de rédaction robuste, performant et conforme RGPD. Vous apprendrez à combiner expressions régulières optimisées et détection sémantique pour traiter emails, numéros de téléphone, IBAN et données contextuelles. L'approche présentée est directement applicable en production avec une latence minimale.

Prérequis

  • Node.js 20+ et TypeScript 5.4+
  • Connaissances avancées en regex et traitement de texte
  • Compte AWS ou GCP pour les services optionnels de NLP
  • Familiarité avec les middlewares Express/Fastify

Initialisation du projet

terminal
npm init -y
npm install typescript @types/node tsx
npm install --save-dev @types/node
npx tsc --init

Initialisation d'un projet TypeScript strict. tsx permet l'exécution directe sans compilation pendant le développement.

Architecture de la solution

Nous allons créer un module de rédaction modulaire avec une interface simple. Chaque type de PII sera géré par un détecteur dédié pour permettre une maintenance et des tests unitaires efficaces.

Définition des détecteurs PII

src/detectors.ts
export interface PIIDetector {
  name: string;
  regex: RegExp;
  replacement: string;
}

export const detectors: PIIDetector[] = [
  { name: 'email', regex: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g, replacement: '[EMAIL_REDACTED]' },
  { name: 'phone', regex: /\b(?:\+33|0)[1-9](?:[\s.-]?\d{2}){4}\b/g, replacement: '[PHONE_REDACTED]' },
  { name: 'iban', regex: /\b[A-Z]{2}\d{2}(?:[\s]?[A-Z0-9]{4}){4,7}\b/g, replacement: '[IBAN_REDACTED]' }
];

Les regex sont optimisées pour les formats français et européens. Chaque détecteur est indépendant pour faciliter l'ajout de nouveaux types de PII.

Implémentation du moteur de rédaction

src/redactor.ts
import { detectors, PIIDetector } from './detectors';

export function redactPII(text: string, customDetectors: PIIDetector[] = []): string {
  let result = text;
  const allDetectors = [...detectors, ...customDetectors];
  for (const detector of allDetectors) {
    result = result.replace(detector.regex, detector.replacement);
  }
  return result;
}

export function redactObject(obj: any): any {
  if (typeof obj === 'string') return redactPII(obj);
  if (Array.isArray(obj)) return obj.map(redactObject);
  if (obj && typeof obj === 'object') {
    const newObj: any = {};
    for (const key in obj) {
      newObj[key] = redactObject(obj[key]);
    }
    return newObj;
  }
  return obj;
}

La fonction redactObject permet de traiter récursivement des objets JSON complets. Cette approche est essentielle pour les API REST et les logs structurés.

Middleware Fastify pour API

src/middleware.ts
import { FastifyRequest, FastifyReply } from 'fastify';
import { redactObject } from './redactor';

export async function piiRedactionMiddleware(request: FastifyRequest, reply: FastifyReply) {
  if (request.body) {
    request.body = redactObject(request.body);
  }
  if (request.query) {
    request.query = redactObject(request.query);
  }
  const originalSend = reply.send;
  reply.send = function (payload: any) {
    return originalSend.call(this, redactObject(payload));
  };
}

Ce middleware intercepte les entrées et sorties pour garantir qu'aucune PII ne transite en clair, même dans les réponses d'erreur.

Tests unitaires complets

src/redactor.test.ts
import { redactPII, redactObject } from './redactor';

describe('PII Redaction', () => {
  it('redacts email correctly', () => {
    expect(redactPII('Contact: test@example.com')).toBe('Contact: [EMAIL_REDACTED]');
  });
  it('redacts nested objects', () => {
    const input = { user: { email: 'john@doe.fr', phone: '0612345678' } };
    expect(redactObject(input)).toEqual({ user: { email: '[EMAIL_REDACTED]', phone: '[PHONE_REDACTED]' } });
  });
});

Les tests couvrent les cas simples et les structures imbriquées. Exécutez avec npx tsx src/redactor.test.ts.

Configuration de production

redactor.config.json
{
  "detectors": ["email", "phone", "iban"],
  "performance": {
    "maxTextLength": 100000,
    "timeoutMs": 50
  },
  "logging": {
    "redactionCount": true,
    "sampleRate": 0.01
  }
}

Configuration externe permettant d'activer/désactiver des détecteurs et de monitorer les performances en production sans redémarrage.

Bonnes pratiques

  • Toujours tester les regex sur des jeux de données réels avant déploiement
  • Utiliser un système de logging des statistiques de rédaction (sans stocker les données)
  • Prévoir un mode dry-run pour les audits
  • Versionner les jeux de détecteurs pour traçabilité
  • Combiner avec des solutions NLP (Presidio, AWS Comprehend) pour les cas complexes

Erreurs courantes à éviter

  • Oublier de traiter les tableaux et objets imbriqués
  • Utiliser des regex trop larges qui cassent des données légitimes
  • Ne pas gérer les timeouts sur de très gros volumes de texte
  • Stocker les logs avant rédaction

Pour aller plus loin

Intégrez des modèles de NLP avancés et découvrez nos formations Learni sur la conformité et la sécurité des données.

Comment automatiser la rédaction de PII en production 2026 | Learni