Article image
Lucas Lima
Lucas Lima14/12/2022 13:22
Compartilhe

Como proteger as senhas dos usuários? Má gestão de senhas #CommunityWeek

  • #PHP
  • #SQL
  • #MySQL

O tratamento de senhas é uma das coisas mais importantes que devemos considerar ao criar a nossa aplicação, porém é compreensível que muitos Devs enfrentem problemas nesse assunto, e sempre deixem algo passar, pois criar um bom sistema de autenticação é uma tarefa extremamente desafiadora e uma das mais complicadas de implementar em nosso sistema.

Mas não se preocupe que esse artigo vai ajudar com o necessário que você precisa saber para proteger as senhas dos seus usuários. Vamos lá!

image

Principais fatores que devemos considerar ao criar um sistema de autenticação

1 - Exigir que o usuário cumpra algumas regras necessárias ao criar uma senha

Algumas exigências são necessárias para encorajar o usuário à criar senhas menos previsíveis, assim como:

  • No mínimo 8 caracteres
  • Pelo menos 1 Letra maiúscula
  • Pelo menos 1 Letra minúscula
  • Pelo menos 1 Número
  • Pelo menos 1 caractere especial (@!#$&*)

2 - Mensagens de erro para o usuário

Existem algumas formas de dificultar o trabalho de um hacker em seu sistema, e uma delas é não mostrar informações que possam o ajudar, assim como:

> Manter apenas uma mensagem de erro na tela de login.

O hacker pode facilmente descobrir se um usuário existe ou não caso sua página de login tenha múltiplas mensagens de erro, como por exemplo:

Em nosso banco de dados temos o usuário "teste123" cadastrado com a senha "123", o hacker percebeu que seu sistema tem múltiplas mensagens de erro na tela de login, então ele começou a testar inúmeros usuários diferentes para saber se eles existem ou não, como no exemplo abaixo:

image

Ao se deparar com a mensagem "Usuário não existe" o hacker nem se dará o trabalho de tentar descobrir a senha dele, então vai para o próximo.

image

Agora o hacker sabe que existe um usuário chamado teste123 e irá tentar de tudo para descobrir sua senha, por isso a melhor forma de retornar mensagens de erro é utilizando apenas uma única mensagem genérica.

image

Agora você acabou de dificultar o trabalho do hacker, pois dessa forma ele não tem a informação se o usuário existe ou não.

Para isso funcionar, também é necessário que tudo no HTTP response seja idêntico em qualquer tipo de falha ao realizar o login. E também que a sua aplicação não realize nenhum contato com os cookies a não ser que o login e a senha estejam corretos.

Outra coisa também é implementar um sistema para bloquear a tentativa de login após X falhas.

> Mensagem da tela de esqueci/redefinir senha

Caso o usuário digite um e-mail que não esteja vinculado a nenhuma conta do nosso banco de dados, evite passar essa informação, pois assim o hacker estará explorando, como falamos no tópico anterior.

image

Ao invés disso, retorne apenas uma mensagem direta como "Ok! Verifique sua caixa de entrada.".

Não envie nada para o e-mail do usuário caso o e-mail não exista.

E envie algo caso o e-mail exista.

image

Assim sua aplicação ficará mais segura! Ah, e lembrem de dar um tempo de expiração para o link de redefinir senha, isso é de extrema importância.

> Tela de cadastro

Na tela de cadastro as coisas ficam mais diferentes, pois é impossível não informar ao usuário que o e-mail/usuário que ele tentou escolher já está sendo usado.

Então, a melhor forma que temos para evitar alguns problemas como esse na tela de cadastro é adicionando um captcha.

3 - Armazenamento de senhas no banco de dados

Esse é um assunto mais complexo, porém tem alguns pontos que você precisa saber.

> NUNCA!!! Armazene senhas sem criptografia (texto normal)

A melhor forma de armazenar senhas é utilizando um One Way Hash, que resumidamente é uma função matemática que gera uma criptografia do input que não tem como voltar ao input original.

Isso irá proteger seus usuários até mesmo se o banco de dados for hackeado. Escolha uma criptografia forte como o Bcrypt.

> Tenha um bom gerenciamento de sessões

- Lembre de implementar session timeouts, que consiste em destruir a sessão do usuário após um tempo X de inatividade.

- Nunca passe o SessionId através de métodos GET ou POST

- Gere novamente o ID da sessão na autenticação, um exemplo em php:

session_regenerate_id(true)

- Aceitar apenas IDs de sessão gerados pelo servidor

- Implemente uma função de logout forte

- Use o gerenciamento de sessão integrado, que consiste em gerar um Id de sessão aleatório forte, com tamanho suficiente para não ser adivinhada.

- Proteja seus cookies!! Existem frameworks que identificam se seus cookies foram manipulados ou não, qualquer suspeita de que seus cookies foram manipulados, encerre e invalide imediatamente a sessão.

> HTTPS

Verifique se seu site utiliza HTTPS, isso fará com se seus cookies fiquem seguros e evitará que as senhas sejam roubadas.

image

4- Encerramento / Conclusão

É Imprescindível o cuidado que devemos ter com as senhas dos nossos usuários, uma má gestão de senhas e dados pode ser FATAL para qualquer tipo de aplicação. Por isso sempre busque boas práticas para dificultar a vida de um hacker e sempre criptografe suas senhas e implemente bons sistemas de sessões!

Uma observação fora do tópico é que esse artigo foi criado com o objetivo de participar do desafio da #CommunityWeek que está acontecendo, vão dar uma olhada!

Então se puderem me ajudar deixando um "UPVOTE/LIKE", ficarei extremamente feliz de trazer mais conteúdo sobre vulnerabilidades e como proteger seu sistema delas.

É isso, espero que tenham gostado :).

Compartilhe
Comentários (1)
Jonathas Araujo
Jonathas Araujo - 14/12/2022 13:58

Olá estou participando do Best Community Influencer


Poderia votar em mim?


Desde já agradeço, e seu post ficou bom.


https://lp.dio.me/dio-awards-2022/