Pular para o conteúdo
Todos os conceitos

Sessão guardada no cliente

Se o crachá fica no navegador e o servidor confia nele como veio, o cliente decide quem é.

Para lembrar quem você é entre as páginas, o servidor pode guardar a sua sessão de dois jeitos. No jeito seguro, ele guarda os seus dados do lado dele e entrega ao navegador só um identificador difícil de adivinhar, que aponta para essa sessão. No jeito perigoso, ele coloca os próprios dados dentro de um texto que fica no navegador (um cookie), e confia neles como vêm.

Quando esse texto é só um JSON em base64, sem assinatura, mudá-lo é trivial. Decodifique, troque "role":"viewer" por "role":"admin" ou "user_id":7 por "user_id":1, recodifique, e o servidor acredita. Não é nem preciso quebrar nada: o crachá é editável porque está na sua mão.

Navegador cookie de sessão (base64 JSON) {"user_id":7,"role":"viewer"} o cliente edita e recodifica {"user_id":1,"role":"admin"} envia o cookie Servidor confia no que o cliente mandou
Um cookie base64 com user_id e role fica no navegador; o cliente troca os valores e recodifica, e o servidor confia no crachá que o próprio cliente preencheu.

A regra é a mesma dos cookies em geral: o servidor nunca deve confiar num dado que o cliente pode editar para decidir identidade ou permissão. Ou a sessão fica do lado do servidor (e o cookie é só um ponteiro aleatório), ou o blob que vai ao cliente é assinado e a assinatura é conferida, como num JWT bem feito.

Aparece nestes desafios