filipedeschamps / tabnews.com.br

Conteúdos para quem trabalha com Programação e Tecnologia.
https://tabnews.com.br
GNU General Public License v3.0
5.07k stars 373 forks source link

Bloquear cadastro com senhas fracas #1690

Open kaioenzo opened 2 months ago

kaioenzo commented 2 months ago

Descrição

Eu acho que permitir o cadastro dos usuários com senhas fracas é um dos requisitos menos desejáveis para qualquer aplicação web atualmente. Atualmente o tabnews permite essa característica.

Sugestão de implementação

Poderíamos criar validações para criação de novos usuários que tentem utilizar senha fraca, sugiro que uma senha forte seja composta por:

De forma opcional vejo a possibilidade de solicitar a atualização das senhas dos usuários existentes para o novo padrão.

Rafatcb commented 2 months ago

Obrigado pela sugestão, @kaioenzo :handshake: Tenho quase certeza que isso já foi discutido, mas procurei e não encontrei nada.

Acho que esses requisitos de criação de senha não são interessantes. Essa resposta no UX Stack Exchange fala um pouco sobre isso, e a tirinha do XKCD deixa mais claro:

Tirinha explicando que uma senha com 8 caracteres, letras maiúsculas e minúsculas, pontuação e número é mais fácil de descobrir por força bruta do que uma com quatro palavras, que possui maior entropia

Também tem essa resposta do Security Stack Exchange.

A resposta do UX Stack Exchange mencionava que bloquearam as 10 mil senhas mais comuns, o que pode ser mais interessante do que exigir uma "senha difícil", mas não sei o quão necessário isso é para o TabNews. E precisaríamos filtrar das 10 mil senhas, quais possuem >= 8 caracteres.

kaioenzo commented 2 months ago

@Rafatcb, Entendo a questão de UI, mas acredito termos alternativas para contornar isso, como barras de progresso que mudam de cor e indicam uma evolução durante a criação da senha, motivando o uso. Além de diversas outras opções.

Quanto a segurança, minha principal preocupação, vejo alguns prós como esse artigo da Agência de Ciber segurança Americana sugere e tantos outros como esse post.

Vejo que a implementação de fator de dupla autenticação é uma alternativa ainda melhor!

mvares commented 2 months ago

@Rafatcb, se possivel, eu me ofereço pra fazer o backend e implementar o que você disse. A parte do frontend seria interessante alguém fazer.

Aliás, o método mais aconselhável e robusto que temos poderia ter uma noção das senhas mais usadas e caso a senha atual do usuário quando for registrar bata com algumas das mais usadas, podemos fazer uma alerta e não manchar a UI.

Rafatcb commented 2 months ago

@kaioenzo temos um issue sobre 2FA (ou MFA): #1171.

@mgrithm obrigado por se prontificar! Antes da implementação, precisamos ter mais claro o que realmente seria benéfico para não correr o risco de implementar e ter o PR fechado por não ser algo desejado.

Acredito que ter a medição no frontend talvez seja algo positivo, mas não como requisito, e sim como indicador. Como o TabNews usa o Primer para a UI, costumo ver o comportamento do GitHub e a documentação do Primer como inspiração/referência. Infelizmente, não encontrei nada sobre isso na documentação, mas se você for editar sua senha no GitHub, verá isso:

https://github.com/filipedeschamps/tabnews.com.br/assets/26308880/0e57531f-d822-4c0f-b380-99c18ec84f25

E a documentação para criar uma senha forte.

Mas veja, não considero que eles fizeram um bom trabalho com isso, porque o usuário pode escolher a senha aaaaaaa1 e achar que é forte, quando na verdade é uma senha simples. No caso do GitHub, o público alvo não é tão leigo, então isso não tem um impacto tão negativo, e acredito que o público do TabNews também tenha mais conhecimento do que o "público geral". Aqui fala um pouco mais sobre o cuidado que precisamos ter para criar uma política de senhas.

No Wikipedia tem a lista das 10 mil senhas mais comuns, mas não sei o quão comum elas são dentre as pessoas falantes da língua portuguesa, por isso comentei que não sei o quão útil seria verificar isso no TabNews (e essa verificação, sim, seria no backend).

gpoleszuk commented 2 months ago

@kaioenzo , na minha opinião, algo que sinto falta em vários sites onde tenho conta, é receber um email assim que o login é realizado com sucesso, indicando detalhes do navegador que acessou e IP origem. Vi isso em um sistema do governo e achei muito bom. O Gmail já possui tal funcionalidade dentro da interface do webemail, reportando os 10 últimos recentes acessos, além de poder enviar a notificação para um email alternativo. Desta forma, se algum intruso conseguir entrar na conta com algum artifício (senha vazada ou capturada e supondo 2FA desativado), consigo saber quando e de onde partiu. Um outro recurso é apresentar para o usuário um banner logo após o login informando-o detalhes do último acesso assim como faz a plataforma Lattes.

Para aqueles que apreciam senhas fáceis mas querem ainda assim mantê-la forte, a postagem do @Rafatcb é bem intuitiva. Em vez adotar uma senha com alguns caracteres embaralhados, adote então uma passphrase. A charge na postagem é bem didática, apresentando um exemplo com as duas propostas.

A força de senha pode ser primeiramente deixada só no lado do cliente. Existem alguns algoritmos empregados por vários websites e parece-me que cada um tem uma avaliação diferente para uma mesma senha. Se ainda assim o usuário altera a requisição POST e envia uma senha fraca para o banco, seria o caso de uma suspensão temporária da conta, pois entende-se que é uma espécie de intrusão. Contudo, isso exige uma validação no backend.

Para o caso de força bruta, após a terceira tentativa, um email reportando-a é enviado juntamente com uma confirmação de autenticação. Por exemplo, pode usar o mesmo código que vocês usam para confirmar a conta caso ela fique colocada em modo suspenso. O usuário ou precisa esperar um tempo para nova tentativa ou acessar seu email, clicar num link de confirmação. Esta ideia de acesso à conta por link de confirmação é utilizada pelo Facebook, se não me engano, dispensando o uso de senha, mas o 2FA em outro dispositivo precisa estar ativo para garantir o mínimo de segurança com 2 fatores.

Para alguns usuários, estas funcionalidades podem paracer chateantes, logo poderiam ficar como opções em uma área de configurações de funcionalidades personalizadas da conta. Cada usuário ativa se desejar.

Rafatcb commented 2 months ago

Para o caso de força bruta, após a terceira tentativa, um email reportando-a é enviado juntamente com uma confirmação de autenticação.

Não vejo necessidade disso porque o usuário não pode fazer nada. Veja, por exemplo, as atividades da minha conta da Microsoft:

12 tentativas de login a partir de países diferentes num intervalo de 10 horas

Ter alguém tentando acessar minha conta não significa que eu preciso trocar de senha. A Microsoft nem me avisa desses logins, são dezenas todos os dias, provavelmente tentando usar uma senha minha que já vazou em algum lugar. E, quando eu vejo os detalhes de uma tentativa e clico em "Proteja a sua conta", recebo essa mensagem:

Agradecemos o seu comentário. Não se preocupe. Essa tentativa de entrada não foi bem-sucedida. Não é necessário alterar sua senha. Saiba como tornar sua conta mais segura

Acredito que o sistema deva se defender de números altos de tentativas, ou locais suspeitos etc, mas não precisa preocupar o usuário sem necessidade. Inclusive, o fato do TabNews exigir o e-mail para realizar o login, e não o nome de usuário, já é um grande passo para evitar receber esse spam de tentativas de login.

gpoleszuk commented 2 months ago

@Rafatcb, não imaginava que a Microsoft tinha essa interface disponivel com tantos detalhes. Deve fazer uns 2 anos que não acesso mais o hotmail. Nem o Gmail nos mostra toda essa informação muito útil. Só de ver a situação de quão visada é sua conta, reforça ainda mais a necessidade de usar senhas muito fortes. Uma das dicas do Akita é usar o número máximo de caracteres permitido pela plataforma, 2FA ou ainda MFA.

Sei que é um grande trabalho para implementar essa funcionalidade no Tabnews. Talvez fique para outro momento quando a plataforma se consolidar. Nem todo mundo imagina quão atacada é uma conta de email por não ter acessos a esses relatórios de tentativa de acesso, ignorando a atual necessidade de que é mais que obrigatório utilizar senhas longas e fortes e/ou múltiplos fatores de autenticação. No caso de sua conta, parece que é um ataque bem distribuído, caso não seja um único indivíduo chaveando as tentativas atrás de uma VPN que possui hosts em diferentes nações.

Valeu por compartlhar esse conhecimento conosco.