Tenho um usuário que está sendo atacado por alguém ou por um script que acessa o endpoint forgot_password diversas vezes ao dia usando o endereço de e-mail dele. Isso tem acontecido há vários dias. Como isso envia e-mails, também pode ser abusivo para o sistema. A partir do nginx access.log, rastreiei o endereço IP de parte desse período até outro usuário no sistema e enviei uma mensagem de alerta, mas isso pode não resolver. Também adicionei esse endereço IP em Admin > Logs > Screened IPs; no entanto, não tenho certeza do que isso fará, exceto impedir o login temporariamente. O endereço IP pode mudar e já mudou, e provavelmente é dinâmico, mas também alguém pode ativar uma VPN e recomeçar.
Alguém tem alguma sugestão sobre como lidar com isso?
Olá Dan, se não se importa, tenho algumas perguntas primeiro.
Você suspendeu o usuário?
Você permite que qualquer pessoa crie uma conta ou aprova todas as novas contas?
Você pode suspender o usuário acessando admin/users/list/active e clicando no nome do usuário infrator. Na página de informações dele/dela, role até Permissões e clique em Suspender. Certifique-se de que o usuário esteja deslogado, pois a suspensão pode só entrar em vigor após o logout. Se ele ainda estiver logado, no canto superior direito desta mesma página há uma caixa azul para você deslogá-lo. Depois que ele estiver deslogado, não poderá mais acessar com as credenciais antigas.
Se você aprova novas contas — e o “culpado” continuar com a infração dele/dela (e você tiver certeza de quem é) — o usuário terá que esperar você aprovar a conta. Como você já tem um (ou mais?) endereço(s) IP que ele usou, se um novo usuário aparecer com esse IP, você sabe o que fazer.
Você também pode acessar as preferências do usuário e, em Conta, ver os dispositivos usados recentemente, o que deve mostrar também o(s) endereço(s) IP usado(s) para login. Isso pode fornecer IPs adicionais para filtrar.
É aqui que a necessidade de aprovação de contas se torna útil.
Como essa pessoa conseguiu acessar o perfil de outro usuário para solicitar uma redefinição de senha? Essa é a pergunta importante.
Obviamente, essa busca não filtra as solicitações legítimas. Revisei manualmente hoje e ontem e vi algumas solicitações legítimas (não no endereço IP repetido). A grande maioria ocorre com um endereço IP repetido que muda a cada poucos dias. Não é muito grave no sistema, mas afeta o usuário que recebe. Acredito que a única coisa que posso fazer é configurar o nginx para negar por endereço IP, mas como ele muda… talvez, se eu verificar e atualizar manualmente por uma ou duas semanas, a pessoa pare de tentar, mas provavelmente apenas por um curto período. A vítima diz que isso inicialmente aconteceu com ele há cerca de 1,5 ano.
Definitivamente é irritante se alguém decidir acionar o ‘esqueci minha senha’ repetidamente em seu nome… mas não podemos bloquear o usuário de redefinições de senha com base nisso, pois bloquear alguém de redefinições de senha também é uma forma de assédio.
Acredito que temos um limite de taxa aqui na ordem de múltiplas vezes por minuto; você pode revisar esse caminho de código @riking e confirmar que ainda está funcionando? Poderíamos aumentá-lo, mas isso não cobriria com segurança ‘algumas vezes por dia’.
Além disso, banir um endereço IP via Admin, Logs, Endereços IP Filtrados deve impedir que esse endereço IP solicite uma redefinição de senha, acredito, e também devemos verificar se isso está funcionando conforme o esperado @riking.
Não há opção para evitar que um e-mail seja enviado para mim ao solicitar uma redefinição de senha, embora eu tenha 2FA ativado com chaves de redefinição.
Alguns sites que visitei mostram seu endereço IP antes mesmo de você solicitar uma redefinição de senha, afirmando que ela será enviada ao seu e-mail.
Tudo isso é apenas um incômodo muito menor, já que raramente verifico este e-mail para qualquer coisa. Todos os e-mails são filtrados e configurados para “marcar mensagem como lida”, para que não apareça que preciso lê-los. Configurei o filtro em janeiro e só hoje olhei a pasta (rótulo no Gmail).
A imagem que não consegui incluir na 1ª resposta.
Quando o Gmail recebe mais de uma mensagem com o mesmo assunto, ele as agrupa.
Estou supondo que, após 100 mensagens iguais, ele simplesmente passa para as próximas 100.
Uma solução simples que você tem é alterar seu e-mail de test@gmail.com para test+SOMESECRETONLYYOUKNOW@gmail.com.
Os e-mails do Discourse serão encaminhados para seu Gmail habitual, mas ninguém poderá enviar solicitações de recuperação de senha, e ninguém conseguirá adivinhar um hash seguro.
Acho que, na prática, isso é o melhor a ser feito neste caso.
Podemos limitar a taxa de envio para uma vez por semana, e mesmo assim seria incômodo. Ao usar o endereçamento com +, você elimina completamente o seu problema.
Podemos limitar a taxa de solicitações para um usuário específico, além das solicitações de um local específico (um limite que já está funcionando muito bem atualmente). Que tal permitir até 2 tokens de redefinição não expirados antes de dizer “por favor, aguarde o e-mail”?
Outra abordagem pode ser limitar o tempo de envio dos e-mails de redefinição de senha, por exemplo, a 3 horas entre os tokens. Assim, se um e-mail de redefinição de senha for solicitado antes do período de espera, uma mensagem simples pode ser exibida:
“Já enviamos um e-mail de redefinição de senha. Por favor, verifique sua caixa de entrada. Se o e-mail não chegar nas próximas 2 horas, entre em contato com o administrador do site para obter ajuda em %contact_email%.”
Mudei o e-mail no fórum para ‘email+algo@gmail.com’ e testei usando o modo anônimo em um navegador diferente. Ainda assim, conseguiu passar. Talvez porque a solicitação seja sempre feita apenas com o nome de usuário de origem, e nunca com o endereço de e-mail real.
Por enquanto, todas as solicitações falsas pararam, já que o Dan deve ter resolvido o problema, seja em particular com o indivíduo ou por outros meios.
Se houvesse uma opção de pergunta de segurança (a ser ativada no nível do usuário), tenho certeza de que isso reduziria todas as solicitações, pois o troll simplesmente não saberia a resposta. “Qual é o seu filme favorito?” ou “Restaurante favorito”.
Obrigado a todos pelas respostas rápidas tentando resolver esse problema, que, infelizmente, parece ser o primeiro e, esperamos, o último.
Acho que o problema é que você pode simplesmente rastrear um fórum em busca de nomes de usuário e depois iniciar uma tempestade de ‘esqueci minha senha’ para trollar.
Talvez possamos adicionar um modo em que seja necessário digitar o e-mail exatamente para acessar a função de ‘esqueci minha senha’, chamado ‘esqueci minha senha estrito’, desativado por padrão?
Acho que até mesmo ser alvo de trollagem uma vez por semana é demais; não conseguimos resolver isso apenas com limitação de taxa.
Existe uma maneira de oferecer uma ou duas “recuperações gratuitas” primeiro, antes de exigir a digitação exata, dentro de um determinado período de tempo? Ou talvez adicionar a exigência de digitação exata apenas a uma conta individual após tantas recuperações, mas automaticamente em nível global?
Alguns de nós literalmente não fazem ideia de que dia é hoje, quanto mais lembrar sem falhas nosso e-mail exato com facilidade.
@Chinaski, espero que isso seja resolvido rapidamente e finalmente para você.
Obrigado a todos por responderem. Espero que o acima funcione, pois parece ser o remédio mais direto neste momento, mas não o testei desde que as perturbações diminuíram. (O usuário potencialmente atacante diz que desativou o acesso de convidados em seu Wi-Fi, mas não podemos ter certeza se essa era a origem.)
Com milhares de usuários ativos (ainda estamos no processo de migração para o Discourse), sinto sua dor. Isso acontece muito, com pessoas esquecendo qual e-mail usaram e coisas assim; isso tem sido facilmente um dos nossos maiores pedidos de suporte ao longo dos anos, é uma loucura.
Exigir a entrada de e-mail para recuperação de senha certamente nunca será algo padrão desse tipo.
Mas se um fórum estiver sob ataque, como no caso do OP, isso poderia ser uma simples opção que você ativaria por algumas semanas para eliminar esse incômodo hack.
Eu apertar as regras para que, no pior cenário, um usuário possa obter apenas 6 redefinições por dia. Isso deve limitar os e-mails em certa medida.
Também segui o conselho de @riking aqui e respeitamos e-mails filtrados, então, se você bloquear um IP como administrador, esse IP não poderá mais participar dessa brincadeira.
Uma grande omissão aqui, @riking, que poderia ajudar um pouco na automedicação, é que o e-mail de “redefinição de senha” não inclui o endereço IP da pessoa que o iniciou:
@codinghorror, o que você acha de adicionar o endereço IP do iniciante nos e-mails de definição de senha (podemos até escondê-lo um pouco)? Isso permitiria uma automedicação muito melhor.
Jane é atacada
Jane notifica o administrador do site que 12.12.12.12 continua redefinindo senhas
Administrador bloqueia 12.12.12.12
As pessoas têm acesso a muitos IPs, então isso ainda pode ser um jogo de gato e rato, mas pelo menos é melhor do que era e os limites estão mais rigorosos.
O Facebook usa esse truque, que eu apoio a implementação:
Isso permite que evitem incluir endereços IP no e-mail; eles apenas rastream do lado do servidor e o link contém um ID no banco de dados. Isso significa que pode se tornar uma operação de um clique para bloquear um abusador.
Para contexto, o Facebook exige e-mail para redefinição de senha (eles nem mesmo têm redefinição de senha no sentido tradicional; é simplesmente login via e-mail)
Analisei 100 solicitações falsas e encontrei um padrão, possivelmente o uso de um script.
Esse padrão é consistente em todas as 100 solicitações falsas em um agrupamento no Gmail.