Botões de Logout

Posted by Daniel Lopes on 05/05/2009

Parece que ultimamente os desenvolvedores tem se preocupado muito com o login e nada com o logout. Resolvi escrever este post pois duas vezes esta semana, me vi perdido, procurando o botão para encerrar minha sessão de algum serviço.

Por que encerrar uma sessão (ou fazer logout) é tão importante? Alguns motivos são óbvios, como se você estiver em uma máquina que será utilizada por mais de uma pessoa, então você corre sérios riscos se não fizer logout… outros não tão óbvios para alguns, mas não fazer logout pode abrir um série de possíveis problemas de segurança.

Por exemplo, um ataque possível caso você não faça logout (trecho copiado do guia de segurança do Ruby On Rails):

  • Bob navega por um fórum de discussão e visualiza uma mensagem criada por um hacker onde existe um elemento HTML de imagem forjado. O elemento referencia um comando na aplicação de gerenciamento de projetos de Bob, ao invés de um arquivo de imagem.
  • <img src="http://www.webapp.com/project/1/destroy"/>
  • A sessão de Bob em www.webapp.com ainda está ativa, porque ele não fez seu logout alguns minutos atrás.
  • Por acessar a mensagem, o navegador encontra uma tag de imagem. Ele tenta carregar a imagem suspeita a partir de www.webapp.com. Como explicado anteriormente, ele também enviará o cookie com id de sessão válido.
  • A aplicação web em www.webapp.com verifica a informação do usuário no respectivo hash de sessão e destroy o projeto com ID 1. Ele então retorna a página com o resultado da operação, o que é um resultado inesperado para o navegador, logo ele não irá exibir a imagem.
  • Bob não percebe o ataque — Mas alguns dias mais tarde ele percebe que o projeto número um se foi."

Existem várias formas de atacar um usuário se ele ainda estiver logado e se o sistema (website) não prover formas de segurança para ataques neste estilo. Para desenvolvedores Rails, por padrão já estaremos protegidos do ataque acima por causa da linha protect_from_forgery :secret => “123456789012345678901234567890…” no ApplicationController.

Mas como vou ter certeza que todos os sistemas adotam este tipo de proteção?! Não vou saber, então, como usuário, sempre faço logout. E estes motivos e vários outros me parecem uma boa justificativa para botões de logout mais visíveis.

Veja alguns exemplos abaixo:

Primeiro temos o registro.br, que o link de finalizar sessão está misturado com uma série de outros links e todos da mesma cor. Você dificilmente conseguirá encontrar o link com uma rápida “passada de olhos”. Pior, se você estiver em uma outra página vai ter que voltar para a página inicial pois o link de finalizar sessão não está disponível em todas as páginas.

O segundo exemplo é o site das Americanas, se você não quiser deixar seu usuário exposto, vai ter que navegar para página meu cadastro e só depois vai ter que procurar pela frase “Olá fulano (se você for outra pessoa, Clique Aqui!)” . Em momento algum você acha a palavra sair ou encerrar e para complicar mais ainda a frase está toda escrita da mesma cor como se Clique Aqui! não fosse um link.

E para fechar os exemplos, o site da Magazine Luiza. Se você efetuar login e esquecer marcado o checkbox de lembrar usuário, prepare-se para a caça ao tesouro. Voltando a página inicial você verá seu nome no topo direito, bacana, é o local normal para botões de sair mas você só encontra uma frase bem vindo. Não existe nenhuma palavra tipo sair, encerrar ou até mesmo o “troque de usuário”, então você tem que ser mágico para saber que o seu nome de usuário é um link e ao clicar nele abrirá um pop-up que vai te explicar porque você não consegue “deslogar” e dentro deste pop-up tem um botão de logout (é, em inglês mesmo) que parece que foi esquecido por ali.

Estes são apenas alguns do exemplos que encontro todos os dias, mas para nós (desenvolvedores e designers) isto é um agravante em nossos produtos e devemos sempre tomar cuidado com este tipo de situação. Não deixe seus usuários suscetíveis a erros banais ou até um ataque malicioso.

Se você acha que um botão vermelho e grande vai atrapalhar o layout então ao menos coloque um link disponível em todas as páginas no topo direito (que é o local já convencionado para esta ação) e utilize palavras como SAIR ou FECHAR SESSÃO.

blog comments powered by Disqus