Servlet Login e acesso direto a outras páginas do sistema

Pessoal,

Estou com uma dúvida…

Eu tenho um sistema web, onde na página index eu vou ter um login, onde o usuário vai se autenticar e assim terá acesso as outras páginas do sistema, que tem que ser restrita ao usuário que foi autenticado…

Por questões de desempenho, eu não quero manter na session um objeto Usuario, queria manter apenas o ID, só que com isso eu poderia forçar na entrada URL, de uma página que um usuário não autenticado teria acesso, um valor para a session? ou isso não é possível? eu tenho esse receio sobre a questão de segurança, eu sei que se eu colocar um ? e colocar os valores de parametro eu posso recuperar depois pelo getParameters, mas a minha dúvida é se eu guardar apenas o id do Usuario na sesion, tem alguma forma de um “atacker” burlar isso e passar diretamente pela url?? acessando o servlet que redirecionaria para essa página jsp e tendo acesso a uma página exclusiva para usuários autenticados …

Tem como eu impedir isso?

Att,

Ola,

Com relacao a verificacao de credenciais, de uma olhada nos Patterns JEE Front Controller e Intercepting Filter, que podem ser aplicados
perfeitamente a essa situacao. Eles podem ser utilizados para filtrar todos os requests e tomar uma decisao com relacao aos mesmos.
Solucao simples, elegante e modular.

Com relacao a questao do desempenho, o fato de armazenar as credenciais do usuario (seja um ID, seja um objeto, etc) nao tem reais impactos
em performance, a menos que voce faca agregacoes desnecessarias aos objetos na sessao, portanto, mantenha na sessao apenas o que realmente
for necessario.

Com relacao a questao de seguranca, suponha que um hacker consiga o ID de sessao de um usuario. Isso eh relativamente simples de obter,
basta anexar um HTTP sniffer num host e procurar pelo header JSESSIONID. OK. Ainda sim, ele teria que utilizar esse ID de sessao
para obter informacoes diretamente do objeto HttpSession no server, o que nao seria trivial. Contudo, se ele conhecer o sistema em uso, ele
poderia por exemplo construir um HTTP Request manualmente e submeter ao Server com uma action como parameter solicitando alguma
acao. Via de regra, sempre que se tratar de informacoes confidenciais utilize uma camada SSL para os protocolos de aplicacao, no caso, o HTTP,
isso resolve completamente os problemas acima, pois nao teria como o hacker obter o ID de sessao e dessa forma se passar por um usuario
autenticado. Por exemplo, a maioria dos sites de e-commerce utiliza HTTPS somente no instante de login (para criptografar as informacoes
de usuario, senha, etc) e no momento do checkout, quando o usuario insere informacoes confidenciais de cartao de credito, nome, endereco, etc.
Se um hacker utiliza a estrategia acima durante a sessao, o maximo que ele ira conseguir seria obter informacoes do carrinho de compras. Se o
seu site precisar trafegar informacao confidencial durante toda a sessao, entao voce ira precisar utilizar uma camada SSL (por exemplo, sites bancarios).

[ ]'s

Oi. Por favor, evite escrever a caixa [Dúvida] no título do tópico. Ela não só não serve para nada (pois praticamente todos os tópicos são mesmo dúvidas) como pode também deixa menos evidente e pode confundir com a caixa de [Resolvido].

Olá,

Eu utilzei SSL na hora do login, e no servlet do login eu coloco na session o nome do usuário e o código dele. Criei uma classe que faz a verificação se a sessão não é nula, assim eu tenho controle… A sessão só expira quando eu fecho o navegador, certo? existe alguma maneira de eu fazer ela expirar quando eu fecho a aba, por exemplo?

Quanto a questão da segurança, eu usando SSL no login eu evito com isso que o atacante intercepte minha Session?? ou eu teria que usar SSL na minha aplicação toda?

Valeu pelas dicas,

Att,