- Enviado
- 24 de setembro de 2026 às 00:09 UTC
- Autor
- Kamo
- Confirmação
- 3e3c3e7
*** foi definido como legível (httpOnly:false) e várias respostas entregaram o ID da sessão em bruto ao browser. O script da página não pode usar o sinal HttpSomente se um endpoint ler o valor de volta: - /api/session/extend e /api/session/info return sessionInfo.sessionId, /api/user-info return como tokenId, /api/debug/cookies como ***Value. Eles agora retornam uma pré-visualização de 8 caracteres (a única consumidor era a tela de depuração do sistema) ou nada. - /valid é servido sem portão de sessão e renderizado cada valor de cookie na página — na servidor, que vê apenas cookies Http também. Agora mostra nomes e tamanhos. - /api/session/extender plantas *** com httpOnly: true. O navegador ainda o envia para o EventSources, <img>/<video> e /meet/join que dependem dele; script não pode mais lê-lo. Agora também falha qualquer biscoito legível. Groundwork para a próxima etapa, inerte até que /api/validate comece a emitir alças: - app/lib/sessionHandle.ts: uma sessão de tabulação HANDLE é o id 128-hex selado com AES-256-GCM sob uma chave derivada (HKDF) de SESSION HANDLE SECRET e uma chave aleatória per-browser em uma HttpOnly Cookie Host-KBK. Exatamente 128 caracteres, então cada verificação existente do cliente aceita; inútil em qualquer outro navegador; a adulteração falhou a etiqueta. sessãoHandle.test.ts cobre selo/aberto, estrangeiro navegador, adulteração, nenhum segredo. - proxy.ts abre uma alça que chega em X-***-Token para o verdadeiro ID da rota, então o ~180 rotas que leram que o cabeçalho não precisa de alterações; uma pega que não abre deixa cair tanto o cabeçalho como o cookie compartilhado *** em vez de deixar a rota voltar para outra sessão de tabulação. A o matcher agora inclui /api/:path* explicitamente (a regra do arquivo estático pulou /api/*.png). - /api/generate-otk ganhos proposite=ws (30 s) para WebSocket apertos de mão; logout mantém a chave do navegador (as alças de outras abas dependem disso). - k8s/deployment.yaml monta o kamo-internal-session-handle Secret (criado no cluster).
