Skip to content

feat(sdk): posture privacy mask-by-default + consentement (DNT/GPC) #11

Description

@DorianOuvrard

Contexte

Audit SDK : replay en record-by-default (seuls les passwords masqués via maskInputOptions:{password:true}). Tous les SOTA masquent par défaut.

Scope

  • Passer maskAllText / maskAllInputs / blockAllMedia à true (options rrweb record), opt-out par sélecteur unmask.
  • Honorer navigator.doNotTrack / globalPrivacyControl (skip capture sauf config).

⚠️ Changement de comportement

Les replays des builds existantes vont soudain masquer le texte. Prévoir un rollout : flag remote-config par build + comms builders, sinon perçu comme une régression.

Références

Sentry Replay (maskAllText/maskAllInputs/blockAllMedia = true par défaut), PostHog (maskAllInputs), OpenReplay (respectDoNotTrack).

Effort : S-M — Valeur : Haute (RGPD).


Sources d'analyse. Née d'un audit de conception du SDK @bworlds/launchkit v1.15.0 vs état de l'art (benchmark open-source de la capture d'infos).
Références comparées en source réelle : rrweb (rrweb-io/rrweb), PostHog (PostHog/posthog-js), Sentry (getsentry/sentry-javascriptpackages/browser, packages/replay-internal), OpenReplay (openreplay/openreplay), Datadog RUM (DataDog/browser-sdk), Grafana Faro (grafana/faro-web-sdk), lib GoogleChrome/web-vitals. Contrainte transport (plafond 64 KiB partagé sendBeacon/keepalive) : Fetch spec + Sentry #1464.
Note honnêteté : la CSP est vérifiée chez Faro (enableContentSecurityPolicyInstrumentation), pas Sentry ; les défauts PostHog dead-clicks/exceptions sont remote-config-gated (non hardcodés).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions