Pergunta

Eu gostaria de impedir que os bots invadam contas fracas protegidas por senha. (por exemplo, isso aconteceu com o eBay e outros grandes sites)

Então, eu definirei um valor em cache (MEM-) com o IP, quantidade de tentativas e registro de data e hora da última tentativa (Memcache-Fall-Out).

Mas e os bots tentando abrir qualquer conta com apenas uma senha. Por exemplo, o bot tenta todas as 500.000 usuários com a senha "Senha123". Talvez 10 sejam abertos.

Portanto, minha tentativa foi apenas armazenar em cache o IP com tentativas e definir o máximo para ~ 50. O eu o excluiria após um login bem -sucedido. Portanto, o adeus apenas fazia login com uma conta válida a cada 49 tenta redefinir o bloqueio.

Existe alguma maneira de fazer isso certo? O que as grandes plataformas fazem sobre isso? O que posso fazer para impedir que os idiotas bloqueassem todos os usuários em um proxy com a tentativa de tentar 50 vezes?

Se não houver práticas recomendadas - isso significa que alguma plataforma é habitável? Pelo menos com uma dica sobre quando os contadores são redefinidos?

Foi útil?

Solução

Eu acho que você pode misturar sua solução com captchas:

  1. Conte o número de tentativas por IP
  2. Caso haja muitas tentativas de um determinado endereço IP dentro de um determinado tempo, adicione um CAPTCHA para o seu formulário de login.

Outras dicas

Alguns sites oferecem talvez duas ou três tentativas antes de começarem a fazer você inserir um Captcha junto com seu nome de usuário/senha. O Captcha desaparece quando você efetua login com sucesso.

Havia um artigo relativamente bom sobre Codificação de horror alguns dias atrás.

Enquanto o código está focado no Django, há uma discussão muito boa sobre os métodos de melhores práticas No blog de Simon Willison. Ele usa o Memcached para rastrear o IPS e o login falhas.

Você poderia usar um Verificador de força de senha Quando um usuário define sua senha para garantir que não esteja usando uma senha forçada facilmente bruta.

EDIT: Só para deixar claro, isso não deve ser visto como uma solução completa para o problema que você está tentando resolver, mas deve ser considerado em conjunto com algumas das outras respostas.

Você nunca poderá impedir que um grupo de bots tente isso de muitos endereços IP diferentes.

Do mesmo endereço IP: eu diria que se você vir um exemplo de comportamento "suspeito" (nome de usuário inválido ou várias contas válidas com tentativas incorretas de login), basta bloquear o login por alguns segundos. Se for um usuário legítimo, eles não se importarão de esperar alguns segundos. Se for um bot, isso os retardará a ponto de ser impraticável. Se você continuar vendo o comportamento do endereço IP, basta bloqueá-los-mas deixe uma porta fora da banda para usuários legítimos (ligue para o telefone #X ou envie um e-mail para este endereço).

OBSERVE: Os endereços IP podem ser compartilhados entre milhares ou até milhões de usuários !!! Por exemplo, a maioria dos usuários da AOL aparece como um conjunto muito pequeno de endereços IP devido à arquitetura de rede da AOL. A maioria dos ISPs mapeia suas grandes bases de usuários para um pequeno conjunto de endereços IP públicos.

Você não pode assumir que um endereço IP pertence a apenas um único usuário.

Você não pode assumir que um único usuário usará apenas um único endereço IP.

Verifique a seguinte pergunta discutindo as melhores práticas contra ataques de força bruta e dicionário distribuídos:

Qual é a melhor contramedida de força bruta distribuída?

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