Melhor método para bloquear repetidas solicitações de login sem um banco de dados?

StackOverflow https://stackoverflow.com/questions/1001963

  •  05-07-2019
  •  | 
  •  

Pergunta

Eu estou tentando escrever uma função de redefinição de senha melhorado para um dos nossos sites voltados públicas e, além de um melhor captcha eu queria sinalizar um nome de usuário que as tentativas de login w / sem sucesso x quantidade de vezes em menos y minutos . O primeiro pensamento era ter um banco de dados que registra cada tentativa e depois a quantidade máxima de tentativas no tempo -. Nós simplesmente bloquear a conta até que um telefonema é recebido do gerente do funcionário para redefini-la

O que é uma abordagem melhor que não requer SQL persistência via. (Cookie / alguma outra coisa?) Se não existir, como posso fazer isso com uma abordagem mais limpo? por alguma razão o meu cérebro está cheio hoje

Foi útil?

Solução

Marque esta resposta sobre Estrangulamento-los.
Estrangulamento de login tenta

Jeff Atwood tem um post interessante sobre o assunto no caso de você estiver curioso.
http://www.codinghorror.com/blog/archives/001206.html

Armazenar-los em um banco de dados pode ser entediante, e você vai acabar se preocupar com inundando sua mesa com tentativas de login. Além disso, armazenar algo na máquina do usuário que controla isso também é complicado, porque eles têm controle sobre todos os arquivos em sua máquina, e eles poderiam facilmente redefinir seu contador login falhou, ou pior, enviar de volta dados defeituoso / malicioso.

Outras dicas

O uso de cookies ou sessões seria ruim, pois um usuário pode limpar suas tentativas de login por apenas limpando cookies. Talvez usando um arquivo em um diretório temporário para armazenar as tentativas de login seria adequado?

Bem, um cookie não é útil contra um atacante (eles simplesmente remover o cookie ou simplesmente não enviá-lo para você). Se você tem estado em memória de aplicativo, você pode ser capaz de usar isso, mas UO tem que ter muito cuidado, pois fazer isso pode causar-lhe para encher sua memória muito rapidamente, além de correr em problemas de escalabilidade devido à concorrência e de bloqueio. E mesmo este pode não funcionar em um aplicativo que está sendo executado em vários servidores diferentes, como o estado do aplicativo provavelmente não é compartilhado entre os servidores. Porque você acha que o armazenamento de dados no banco de dados é uma má idéia?

Você pode usar um banco de dados, usar memcache e configurar uma tarefa agendada para despejar a tabela periódica. Você também pode usar cookies ou variáveis ??de sessão, mas eu não iria contar com estes por razões de segurança.

Esteja ciente de que a meta de um cracker pode não ser para obter acesso ao seu sistema, mas para torná-lo inutilizável para todos. Ele poderia talvez conseguir isso de bom grado login com credenciais falsas para bloquear determinados usuários do seu site! Eu acho que você não vai encontrar qualquer solução adequada sem um banco de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top