Login da conta mesmo passar email diferente

1

Espero que este seja o StackExchange correto para postar, já que não é relacionado a programação. Desculpas se não.

Se eu tiver um sistema de usuários, seja thin client, aplicativo da web, software e eu tiver dois usuários, Billy e John. Billy e John têm a mesma senha por coincidência, pass1234, mas e-mails diferentes:

[email protected] - pass1234

[email protected] - pass1234

Se Billy digitar acidentalmente o e-mail e o login de John, ele poderá fazer login como ele; como por pura coincidência eles têm a mesma senha.

Existe algum mecanismo de programação / sistema / administração para evitar algo assim? Como o que é para impedir que alguém use uma senha fixa "Passw0rd" e, em seguida, percorrer milhares de e-mails diferentes até obter um hit. (excluindo o uso de captchas)

Estou pensando em algo como senha + salt aleatória derivada do nome de usuário, ou hash a senha com o nome de usuário etc, antes de verificar no nível do banco de dados.

    
por JRed 27.07.2016 / 09:01

3 respostas

5

Se os usuários escolherem a mesma senha (por coincidência), então, não importa qual algoritmo de hashing você usa a mesma senha, ainda é a mesma senha.

A única maneira de contornar isso será verificar cada vez que alguém registra ou altera sua senha que a senha é verificada contra um banco de dados de senhas (baaad) ou se você usar um algoritmo de hash que não usa diferentes sais / pimentas etc para cada senha (novamente, baaad).

Por fim, e esse é um dos muitos motivos pelos quais uma política de complexidade de senha sempre deve ser necessária para que você minimize o risco potencial de pessoas criarem a mesma senha.

Ou seja. Se você não permitir que sua equipe crie senhas fáceis como "Senha1", mas exigir que elas digitem letras maiúsculas, números e símbolos, as chances de elas digitarem a mesma senha são reduzidas - não eliminadas porque alguém poderia facilmente fazer, por exemplo "Password123!".

O hashing apenas protege os dados armazenados no banco de dados porque o servidor recebe os detalhes inseridos pelo usuário - > recupera o hash, o sal (e a pimenta se ambos são usados) - > executa os detalhes inseridos e obtidos do banco de dados através do algoritmo - > se o resultado for comparado ao hash armazenado, os detalhes estão corretos e permitem que o usuário entre. Isso é apenas para verificar os detalhes - nada a ver com o que o usuário digita e escolhe a senha configurada. Sal e pimenta apenas permite que o hash não seja duplicado em outro lugar no banco de dados (ou seja, se dois hashes são idênticos, a senha será a mesma para ambas as contas - baaad).

Como outras respostas já disseram, a melhor solução é a autenticação de vários fatores (mais de um dos seguintes, mas não mais do mesmo fator):

  1. Algo que você tem - > um cartão inteligente, gerador RSA, etc.
  2. Algo que você conhece - > A senha ou PIN
  3. Algo que você é - > biométrico (impressão digital, retina etc.)

Por exemplo,

  • Cartão inteligente + Senha = Bom
  • Gerador RSA + Senha + Impressão digital = Bom
  • Senha + PIN = Ruim
por 27.07.2016 / 09:09
1

Para ser honesto, a probabilidade de isso acontecer "aleatoriamente" é baixa, mas é exatamente como contas com senhas fracas são "hackeadas". Se você acertar contas suficientes, com certeza você chegará a uma com uma senha incorreta.

Existem várias coisas que você pode fazer para ajudar a aumentar a segurança, mas a principal é ter uma política de senha melhor, por isso é improvável que os usuários escolham a mesma senha. Junto com isso, você pode fornecer aos usuários algo mais para ajudar a identificá-los, isso pode ser um certificado de software ou algo como um token de hardware que gera um código para usar.

Você não pode derivar alguma solução usando o nome de usuário fornecido, como no seu exemplo, quando o nome de usuário do john é digitado, será exatamente como se o próprio john estivesse logado.

    
por 27.07.2016 / 09:10
0

Você pode usar a autenticação bidirecional,

Exemplo: senha + OTP ou senha + ID do RSA

    
por 27.07.2016 / 09:11