# Website-skeleton: vérification de l’origine des messages postMessage **Problème:** Un utilisateur pouvait forcer l’accès à la partie connectée en exécutant dans la console du navigateur un `window.postMessage({ type: 'pairing-relay-status', payload: { pairingSatisfied: true, relayOk: true } }, '*')`. Si une session (login-proof) existait déjà, la section connectée s’affichait sans que pairing/relais soient réellement OK. **Impacts:** Risque de contournement des conditions d’accès (pairing satisfait, relais OK) et affichage de la partie connectée dans un état non conforme. **Cause:** Le handler `handleMessage` du website-skeleton ne vérifiait pas l’origine du message ; tout script s’exécutant dans la même page (ou la console) pouvait envoyer un faux `pairing-relay-status` ou `login-proof` (pour login-proof la vérification côté preuve reste, mais l’origine n’était pas contrôlée). **Root cause:** Absence de contrôle de `event.origin` sur les messages reçus via `window.addEventListener('message', handleMessage)`. **Correctifs:** - Au début de `handleMessage`, ignorer tout message dont `msg.origin !== USERWALLET_ORIGIN`. Seuls les messages émis par l’iframe UserWallet (même origine que `USERWALLET_ORIGIN`) sont traités. Un `postMessage` depuis la console a pour origine l’URL du site skeleton, pas celle du UserWallet, donc il est rejeté. **Evolutions:** Aucune. **Pages affectées:** - `website-skeleton/src/main.ts` (vérification `msg.origin !== USERWALLET_ORIGIN` en tête de `handleMessage`) - `features/website-skeleton-partie-connectee-pairing-relay.md` (mention de la vérification d’origine) - `fixKnowledge/website-skeleton-postmessage-origin-check.md` (ce document) **Modalités de déploiement:** Déploiement classique du website-skeleton. **Modalités d’analyse:** En console sur la page skeleton, exécuter `window.postMessage({ type: 'pairing-relay-status', payload: { pairingSatisfied: true, relayOk: true } }, '*')` alors qu’une session existe : la section connectée ne doit pas s’afficher si pairing/relay ne sont pas OK (message rejeté car origine ≠ UserWallet).