- Shipped
- 24 settembre 2026 alle ore 00:09 UTC
- Author
- Kamo
- Commit
- 3e3c3e7
*** è stata impostata leggibile (httpOnly:false) e diverse risposte hanno consegnato la sessione grezza id al browser. Lo script di pagina non può utilizzare la bandiera HttpOnly di un cookie se un endpoint legge il valore di nuovo: - /api/session/extend e /api/session/info ha restituito la sessioneInfo.sessionId, /api/user-info come tokenId, /api/debug/cookies come ***Valore. Ora ritornano un'anteprima di 8 caratteri (l'unico il consumatore era lo schermo del sistema Debug) o niente. - /valid è servito senza cancello di sessione e reso ogni cookie VALUE nella pagina — sulla server, che vede anche i cookie HttpOnly. Ora mostra nomi e dimensioni. - /api/session/extend impianti *** con httpOnly: true. Il browser lo invia ancora agli EventSources, <img> / <video> e /meet/join che dipendono da esso; lo script non può più leggerlo. Ora fallisce anche un biscotto che si e' piazzato leggibile. Lavoro a terra per il passo successivo, inerte fino a /api/validate inizia a emettere maniglie: - app/lib/sessionHandle.ts: la sessione di una scheda HANDLE è il id 128-hex sigillato con AES-256-GCM sotto una chiave derivata (HKDF) da SESSION HANDLE SECRET e una chiave casuale per-browser in un HttpOnly Biscotto KBK. Esattamente 128 caratteri, così ogni controllo client esistente lo accetta; inutile in qualsiasi altro browser; manomissione non riesce il tag. sessioneHandle.test.ts copre sigillo/aperto, straniero browser, manomissione, nessun segreto. - proxy.ts apre una maniglia che arriva in X-***-Token nel vero id per il percorso, quindi il ~180 percorsi che leggono che l'intestazione non ha bisogno di modifiche; una maniglia che non apre gocce sia l'intestazione che l'intestazione il cookie *** condiviso piuttosto che lasciare che il percorso ritorni alla sessione di un'altra scheda. The Il matcher ora include /api/:path* esplicitamente (la regola del file statico saltata /api/*.png). - /api/generate-otk guadagna scopo=ws (30 s) per WebSocket handshakes; logout mantiene la chiave del browser (le maniglie delle altre schede dipendono da esso). - k8s/deployment.yaml monta il kamo-internal-session-handle Secret (creato nel cluster).
