- Expédié
- 24 septembre 2026 à 00:09 UTC
- Auteur
- Kamo
- Commit
- 3e3c3e7
*** a été défini lisible (httpSeulement:false) et plusieurs réponses ont remis l'id de la session brute navigateur. Le script de page ne peut pas utiliser le drapeau HttpOnly d'un cookie si un endpoint lit la valeur en arrière : - /api/session/extend et /api/session/info renvoyé sessionInfo.sessionId, /api/user-info retourné comme jetonId, /api/debug/cookies comme ***Valeur. Ils retournent maintenant un aperçu de 8 caractères (la seule le consommateur était l'écran de débogage système) ou rien. - /valid est servi sans porte de session et rendu chaque cookie VALEUR dans la page — sur la serveur, qui ne voit que les cookies. Il montre maintenant les noms et les tailles. - /api/session/extend plants *** avec httpSeulement: true. Le navigateur l'envoie toujours à EventSources, <img>/<video> et /meet/join qui en dépendent; le script ne peut plus le lire. - ************* **** maintenant aussi échoue tout *** cookie planté lisible. Travail de fond pour la prochaine étape, inerte jusqu'à ce que /api/validate commence à émettre des poignées: - app/lib/sessionHandle.ts: la session d'un onglet HANDLE est l'id de 128 hex scellé avec AES-256-GCM sous une clé dérivée (HKDF) de SESSION HANDLE SECRET et une clé par navigateur aléatoire dans un HttpUniquement Cookie Host-KBK. Exactement 128 caractères, donc chaque contrôle client existant l'accepte; inutile dans tout autre navigateur; la manipulation échoue la balise. sessionHandle.test.ts couvre scellé/ouvert, étranger navigateur, manipulation, aucun secret. - proxy.ts ouvre une poignée arrivant en X-***-Token dans le vrai id pour la route, donc le ~180 les routes qui lisent l'en-tête n'ont pas besoin de changement; une poignée qui ne s'ouvre pas dépose à la fois l'en-tête et le cookie partagé *** plutôt que de laisser la route revenir à la session d'un autre onglet. Les Le jumeleur inclut désormais explicitement /api/:path* (la règle du fichier statique a été ignorée /api/*.png). - /api/generate-otk gagne but=ws (30 s) pour les poignées de main WebSocket; la déconnection conserve la clé du navigateur (les poignées d'autres onglets en dépendent). - k8s/deployment.yaml monte le kamo-internal-session-handle Secret (créé dans le cluster).
