Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

armazenando senhas no SQL Server


A maneira usual de armazenar a senha é usar uma função de hash na senha, mas sal isso de antemão. É importante "saltar" a senha, para se defender da rainbow table ataques.

Então sua tabela deve ser algo assim
._______._________________.______________.
|user_id|hash             |salt          |
|-------|-----------------|--------------|
|12     |[email protected]|13%!#tQ!#3t...|
|       |...              |...           |

Ao verificar se uma determinada senha corresponde a um usuário, você deve concatenar o salt para a senha fornecida e calcular a função de hash da string de resultado. Se a saída da função hash corresponder ao hash coluna - é a senha correta.

É importante entender, no entanto, que a ideia do salt-hash tem uma razão específica - para evitar que qualquer pessoa com acesso ao banco de dados saiba a senha de qualquer pessoa (é considerado um problema difícil reverter uma saída de função hash). Assim, por exemplo, o DBA do banco, não conseguiria fazer login na sua conta bancária, mesmo que tenha acesso a todas as colunas.

Você também deve considerar usá-lo se achar que seus usuários usarão uma senha confidencial (por exemplo, a senha da conta do Gmail) como senha para seu site.

IMHO nem sempre é um recurso de segurança necessário. Então você deve pensar se você quer ou não.

Veja este artigo para um bom resumo deste mecanismo.

Atualização: Vale ressaltar que, para segurança extra contra ataques direcionados para reverter o hash da senha individual, você deve usar bcrypt , que pode ser arbitrariamente difícil de calcular. (Mas a menos que você esteja realmente com medo do misterioso homem de preto visando seu banco de dados específico, acho que sha1 é bom o suficiente. Eu não introduziria outra dependência para meu projeto para essa segurança extra. Dito isso, não há razão para não usar sha1 100 vezes, o que daria um efeito semelhante).