Por que você deve fazer o Hash

Todas as senhas devem ser transformadas em hash antes de serem inseridas em um banco de dados, pois é preciso considerar o cenário em que algum usuário mal-intencionado tenta obter acesso aos seus dados. As senhas são informações confidenciais que você não quer que as pessoas vejam.

Agora não vamos confundir criptografia com hashing. A criptografia de algo pressupõe que ele possa ser descriptografado posteriormente. Embora isso seja melhor do que deixar como texto simples, o que realmente queremos é algo que não possa ser descriptografado. É isso que o hashing nos oferece.

Hashing com Bcrypt

Para este exemplo, usaremos o mais popular bcryptjs para o Node.js. No entanto, as regras que ela segue são as mesmas que as de outras bibliotecas Bcrypt padrão. Você passa uma string a ser transformada em hash e, normalmente, um salt também.

Para o exemplo de bcryptjs você faria algo assim, de acordo com a documentação:

O hash produzido a partir disso não seria legível por humanos e, portanto, seguro para ser armazenado em um banco de dados. Mas como comparar as senhas no cenário em que é necessário implementar um login de usuário?

Validação com base em senhas salvas

As bibliotecas Bcrypt sempre têm uma função para comparar uma senha de texto simples com um hash. É assim que você validaria uma senha no cenário de login do usuário.

As duas linhas acima foram praticamente retiradas da documentação. Na primeira linha, a comparação falhará e retornará false para o usuário. Nesse caso, você sabe que os valores estão errados, mesmo sem saber qual é realmente a senha com hash. No caso da segunda linha, as senhas são iguais e você receberá uma resposta verdadeira.

Um exemplo de trabalho

Vamos criar um exemplo prático com o que aprendemos acima. Crie um novo diretório em algum lugar e, nele, crie um novo package.json com o seguinte JSON:

As partes importantes são as dependências. Estamos incluindo bcryptjs para hashing, couchbase para comunicação com o Couchbase por meio de nosso aplicativo, e uuid para gerar chaves de documento exclusivas.

Agora precisamos criar um novo arquivo chamado config.json em nosso diretório de projeto e inclua o seguinte JSON:

Você deve trocar o servidor e o bucket pelo que planeja usar.

Agora vamos à parte divertida! Crie um arquivo chamado app.js pois é nele que todo o nosso código será inserido. Lembre-se de que este é um exemplo, portanto, a funcionalidade será limitada. Adicione o seguinte código JavaScript à seção app.js file:

Basicamente, estamos apenas criando um documento JSON com uma senha com hash e inserindo-o no Couchbase Server. Após a conclusão da inserção, obtemos o documento e comparamos as senhas.

Conclusão

Você nunca deve armazenar senhas de texto simples em seu banco de dados. Não importa quão seguro seja o seu banco de dados ou que tipo de banco de dados esteja usando. Ao usar o algoritmo de hashing Bcrypt em suas senhas, você pode adicionar uma enorme quantidade de segurança aos seus usuários.

O bcryptjs para Node.js é apenas uma das muitas bibliotecas adequadas que podem realizar essa tarefa.

Autor

Postado por Nic Raboy, defensor dos desenvolvedores, Couchbase

Nic Raboy é um defensor das modernas tecnologias de desenvolvimento móvel e da Web. Ele tem experiência em Java, JavaScript, Golang e uma variedade de estruturas, como Angular, NativeScript e Apache Cordova. Nic escreve sobre suas experiências de desenvolvimento relacionadas a tornar o desenvolvimento móvel e da Web mais fácil de entender.

Deixar uma resposta