Blog Formação DEV

Como armazenar senhas de usuários

Neste artigo veremos como podemos armazenar senhas de usuários de uma forma segura em aplicações desenvolvidas com Node.JS.
Como armazenar senhas de usuários
Texto de: Letícia Garcez

Introdução

Atualmente, uma das principais preocupações de sites que armazenam dados de usuários é manter a segurança desses dados, já que ataques são cada vez mais frequentes e os bancos de dados de aplicações acabam sendo um dos alvos mais comuns de ataques.

Uma das maneiras utilizadas para mitigar os efeitos de acessos indevidos aos bancos de dados é armazenar dados de maneira que estes não sejam facilmente legíveis, ou seja, caso alguma pessoa mal intencionada consiga acesso ao banco de dados do seu sistema, não conseguirá ler com facilidade as informações armazenadas nele.

Para fazer com que os dados não sejam facilmente legíveis, existem algumas técnicas, como a criptografia de dados, por exemplo. Essa estratégia é muito utilizada no armazenamento de senhas, o qual é o foco desse artigo.

Como criptografar a senha

Existem diversas maneiras de fazer a criptografia de dados, mas considerando o ambiente de desenvolvimento web, falaremos aqui no uso do pacote bcrypt. Este pacote está disponível no npm e para manter a simplicidade, dos exemplos usaremos a versão síncrona das funcionalidades desse pacote ao longo do artigo, embora também possamos utilizar versões assíncronas das mesmas funcionalidades.

Para criptografar a senha, precisamos primeiramente gerar um “sal”. Esse “sal” nada mais é do que um dado gerado de maneira aleatória utilizado no processo de criptografia da senha. Depois disso, basta chamar a função de criptografia (no caso, hashSync) informando o sal, como no código abaixo:

const bcrypt = require("bcrypt");

const senha1 = "1234567";

const salt = bcrypt.genSaltSync(1);//Geração de um "sal" com custo de processamento 1
const senhaCriptografada = bcrypt.hashSync(senha1,salt);

console.log(senhaCriptografada)

Você verá que o resultado impresso, mesmo para uma senha simples como essa, é uma string complexa, que pode ser armazenada no seu banco de dados, provendo mais segurança para o usuário.

Como saber se o usuário digitou a senha correta

Considerando que a senha do usuário armazenada na máquina é a senha criptografada, como podemos saber se o usuário digitou a senha correta, uma vez que não conseguimos a partir da versão criptografada da senha original retornar à senha original?

Bom, o próprio pacote bcrypt nos oferece funcionalidades capazes de fazer esse tipo de comparação, como no exemplo abaixo.

const bcrypt = require("bcrypt");

const senha1 = "1234567";
const senhaDigitada = "1234567";

const salt = bcrypt.genSaltSync(1);
const senhaCriptografada = bcrypt.hashSync(senha1, salt);

const saoIguais = bcrypt.compareSync(senhaDigitada, senhaCriptografada);

console.log(saoIguais);

Se alterarmos o valor da variável senhaDigitada, veremos que o resultado impresso na tela mudará uma vez que as senhas sejam diferentes.

Considerações finais

Neste artigo conhecemos o pacote bcrypt e vimos como é possível utilizar esse pacote para fazer a criptografia de uma senha e como podemos verificar posteriormente se a senha digitada pelo usuário corresponde à senha armazenada.

Sobre o autor
Cod3r

Cod3r

Com mais de 400 mil alunos, a Cod3r é uma das principais escolas de tecnologia do País. Um de seus produtos mais importantes é a Formação DEV, com objetivo de preparar os profissionais para o mercado.

Ótimo! Inscreveu-se com sucesso.

Bem-vindo de volta! Registou-se com sucesso.

Assinou com sucesso o Blog Formação DEV .

Sucesso! Verifique o seu e-mail para obter o link mágico para se inscrever.

As suas informações de pagamento foram atualizadas.

Seu pagamento não foi atualizado.