Bom dia!!!
Pessoal, alguém poderia me ajudar a tratar “Session fixation”.
Desde já agradeço.
Bom dia!!!
Pessoal, alguém poderia me ajudar a tratar “Session fixation”.
Desde já agradeço.
O que é isso?
Vou tentar te explicar:
Session Fixation => quando um hacker invade uma máquina e fixa um session id na aplicação, antes que o mesma seja autenticada no servidor.
Não dá pra fazer session fixation em servidores Java, o sessionid não é recebido em lugar nenhum pela aplicação, ele é criado pelo próprio servidor.
Session fixation substituiu XSS como o grande bicho-papão do momento. O ataque básico é simples, uma variação dos ataques man-in-the-middle:
O agressor inicia uma sessão no servidor-alvo e obtém um jsessionid válido
(a parte complicada) O agressor faz com que o usuário-alvo use o session id que ele criou. Ele pode fazer isso por exemplo setando um cookie ou reescrevendo links.
O usuário desavisado loga no servidor. A partir daí, o agressor pode usar esse session id para se passar pelo usuário.
[EDIT] Ou você pode seguir o link do thingol, que explica bem melhor.
Para previnir isso, você pode destruir a sessão e criar uma nova. Algo assim deve ser o suficiente:
if(validaUsuario(usuario, senha)){
// depois de verificar usuário/senha, recria a session do zero
HttpSession session = request.getSession();
session.invalidate();
session = request.getSession();
// seta valores na nova session indicando que o usuário logou com sucesso
session.setAttribute("usuario", usuario);
}
[EDIT 2] Por que isso funciona: Na chamada session.invalidate(), a sessão é destruída e o jsessionid usado se torna inválido. No segundo getSession, uma nova sessão (com um novo jsessionid) será criada. Se você estiver usando HTTPS, não há como interceptar esse novo ID.