Grille ouverte · CC BY 4.0

Trace pré-consentement

v1.0 — 27 juillet 2026

La méthode et le test que j'utilise pour vérifier qu'une page n'émet aucune requête tierce avant toute interaction. Reproductible à la main, automatisable, et exécutée à chaque déploiement de ce site.

La méthode

  1. Fenêtre de navigation privée.
  2. Stockage vidé — cookies, localStorage, sessionStorage.
  3. Onglet « Réseau » des outils de développement en enregistrement.
  4. Rechargement forcé de la page.
  5. Ne toucher à rien.

Ce qui est vérifié à T-0

  • Liste blanche, pas liste noire : à T-0, toute requête réseau a la même origine que la page. Toute requête tierce échoue — traqueur connu ou non.
  • document.cookie est vide.
  • localStorage et sessionStorage ne contiennent qu'une éventuelle clé fonctionnelle de première partie (ici portfolio-locale).

Le test (Playwright)

// Trace pré-consentement — v1.0 (27 juillet 2026)
// Licence : CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/deed.fr
// Auteur : Mickael Gomes — https://mickael-gomes.com/grilles/trace-pre-consentement
//
// MÉTHODE (à reproduire à la main, sans aucun outil) :
//   1. Fenêtre de navigation privée.
//   2. Stockage vidé (cookies, localStorage, sessionStorage).
//   3. Onglet « Réseau » des outils de développement en enregistrement.
//   4. Rechargement forcé de la page.
//   5. Ne toucher à rien.
//
// À T-0 (avant toute interaction), on vérifie par une LISTE BLANCHE, non par une
// liste noire : toute requête réseau doit avoir la même origine que la page.
// Toute requête tierce échoue — qu'il s'agisse d'un traqueur connu ou non.
// On vérifie aussi qu'aucun cookie n'est posé et que le stockage ne contient
// rien d'autre qu'une éventuelle clé fonctionnelle de première partie.
//
// Playwright — `npx playwright test` (adapter PAGES et ALLOWED_STORAGE à votre site) :
import { test, expect, type Request } from "@playwright/test";

const PAGES = ["/"]; // les pages à tracer
const ALLOWED_STORAGE = new Set<string>([]); // clés fonctionnelles de 1re partie tolérées

for (const path of PAGES) {
  test(`pre-consent T-0 (same-origin only): ${path}`, async ({ page, context }) => {
    await context.clearCookies();

    const requests: string[] = [];
    page.on("request", (r: Request) => requests.push(r.url()));

    // Chargement, puis délai pour laisser partir les requêtes différées/asynchrones.
    // Aucune interaction.
    await page.goto(path, { waitUntil: "commit" });
    await page.waitForTimeout(2500);

    const pageOrigin = new URL(page.url()).origin;
    const crossOrigin = [
      ...new Set(
        requests
          .filter((u) => /^https?:/i.test(u))
          .filter((u) => {
            try {
              return new URL(u).origin !== pageOrigin;
            } catch {
              return true;
            }
          }),
      ),
    ];

    const cookie = await page.evaluate(() => document.cookie);
    const storage = await page.evaluate(() => [
      ...Object.keys(localStorage),
      ...Object.keys(sessionStorage),
    ]);
    const disallowedStorage = storage.filter((k) => !ALLOWED_STORAGE.has(k));

    expect(crossOrigin, `requête(s) tierce(s) à T-0 :\n${crossOrigin.join("\n")}`).toEqual([]);
    expect(cookie, "document.cookie doit être vide à T-0").toBe("");
    expect(disallowedStorage, "stockage non autorisé à T-0").toEqual([]);
  });
}

Télécharger le fichier .spec.ts →

Licence

Cette grille et son test sont publiés sous licence Creative Commons Attribution 4.0 (CC BY 4.0) (ouvre un nouvel onglet). Réutilisation libre, y compris commerciale, avec attribution.

Journal des versions

  • v1.0 — 27 juillet 2026 — version initiale : liste blanche same-origin à T-0, cookie vide, stockage limité à la clé fonctionnelle de première partie.