OWASP AppSec Brasil

A segunda edição da versão brasileira principal conferência mundial de segurança de software vai acontecer em 2010. Será nos dias 16 a 19 de novembro em Campinas e terá como keynotes:

Para mais detalhes, veja o site da OWASP AppSec Brasil 2010.

110 dias para
AppSec Brasil 2010

Links

Outros sites de interesse:
   OWASP
   Build Security In

Acesse também:
    www.sapao.net

Termos de uso

O conteúdo deste site está sujeito à licença Creative Commons.

Creative Commons License

Atividade recente no site

Início‎ > ‎

Criar nova sessão após a autenticação do usuário

Muitas aplicações web e, em especial, aplicações J2EE costumam gerar identificadores de sessão para os usuários mesmo quando não ocorre a autenticação dos usuários. Isto pode ser um comportamento necessário, no caso de um site de compras, por exemplo, ou apenas um efeito colateral do uso de frameworks baseados em sessões.

No entanto, é importante que uma nova sessão seja criada para o usuário depois do processo de autenticação. Isto evita a ocorrência de ataques de session fixation. Num ataque deste tipo, o adversário faz com que o usuário acesse a aplicação usando um identificador de sessão conhecido pelo adversário. Isto poderia ocorrer através de ataques de phishing, por exemplo, ou explorando vulnerabilidades de cross-site scripting. Depois que o usuário se autentica na aplicação, se a aplicação não criar uma nova sessão com um novo identificador, o adversário para a conhecer um identificador válido para uma sessão autenticada, podendo se valer das credenciais do usuário junto à aplicação.

Para evitar ataques de session fixation, a aplicação deve gerar uma nova sessão para o usuário sempre que ocorrer a autenticação. Se houver alguma informação na sessão anônima que puder ser necessária no decorrer da sessão, a aplicação deve associar esta informação à nova sessão recém criada.

O código abaixo mostra como abandonar uma sessão a criar outra após a autenticação:
public class ExampleLoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
if( //autenticação bem sucedida ) {
request.getSession().invalidate();
HttpSession session = request.getSession(true);
session.setAttribute("AUTHENTICATED", new Boolean(true));
response.sendRedirect("PageRequiringAuthentication.jsp");
No caso de aplicações Struts 2, o código abaixo é mais apropriado:
if(//autenticação bem sucedida)  {

/* Renovação do identificador de sessão */
((SessionMap)this.session).invalidate();
this.session = ActionContext.getContext().getSession();

session.put("AUTHENTICATED", new Boolean(true));

return SUCCESS;
}

else
return ERROR;
}

Fonte

COBLENTZ, Nick. JSESSIONID Regeneration in Struts 2. Nick Coblentz blog, Sep 2008: http://nickcoblentz.blogspot.com/2008/09/jsessionid-regeneration-in-struts-2.html