anúncios

terça-feira, 27 de fevereiro de 2024

Como armazenar senhas com segurança em um banco de dados

A segurança das senhas dos usuários é uma das preocupações mais importantes para qualquer aplicação ou serviço online. A forma como as senhas são armazenadas pode determinar a resistência do sistema a ataques e violações de segurança. Neste artigo, vamos discutir práticas recomendadas e abordagens a serem evitadas ao armazenar senhas em um banco de dados.

O que não deve ser feito?

  • Armazenamento em Texto Puro: Armazenar senhas em texto simples é uma das práticas mais inseguras. Isso significa que as senhas estão disponíveis em seu formato legível para qualquer pessoa que tenha acesso ao banco de dados. Isso expõe os usuários a riscos significativos, especialmente em caso de violação de dados.
  • Hash MD5 e SHA: O uso de algoritmos de hash como MD5 ou SHA para armazenar senhas também não é mais recomendado. Esses algoritmos são rápidos e podem ser facilmente quebrados usando técnicas de força bruta ou ataques de dicionário. Além disso, eles não oferecem proteção adequada contra ataques de hash conhecidos, como ataques de tabela arco-íris.
  • Encrypt e Decrypt: O uso de criptografia simétrica para armazenar senhas também não é uma prática recomendada. Isso envolve a criptografia das senhas usando uma chave e, em seguida, descriptografá-las quando necessário. No entanto, se a chave for comprometida, todas as senhas armazenadas estarão em risco.

Recomendação: Usando Bcrypt

O Bcrypt é um algoritmo de hashing projetado especificamente para armazenar senhas de forma segura. Ele incorpora um fator de trabalho ajustável, tornando-o mais resistente a ataques de força bruta e dicionário, mesmo com o aumento da capacidade de computação.

O Bcrypt é amplamente recomendado pela comunidade de segurança e é suportado por muitas linguagens de programação, incluindo Python.

Para armazenar senhas com hash Bcrypt em um banco de dados MySQL em um ambiente Docker, primeiro você precisa configurar um contêiner Docker MySQL e, em seguida, adaptar o script Python para se conectar a esse banco de dados e armazenar as senhas com segurança.

Configurando o contâiner MySQL

Certifique-se de ter o Docker instalado em sua máquina, verifique Instalando Docker e Docker Compose no Linux (qualquer distro) ou Instalando Docker no Windows 10 .

Em seguida, você pode executar o seguinte comando para configurar um contêiner Docker MySQL:

docker run --name meu-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=safe_password -d mysql:latest

Isso criará um contêiner MySQL com uma senha de root especificada como "secret".

docker start meu-mysql

Script create_table_usuarios.sql


CREATE TABLE usuarios(
  id INTEGER PRIMARY KEY AUTO_INCREMENT,
 nome VARCHAR(200),
email VARCHAR(200),
 senha VARCHAR(200)
);

docker cp create_table_usuarios.sql meu-mysql:/create_table_usuarios.sql

docker exec -it meu-mysql bash

mysql -u root -p safe_password < create_users.sql

Script Python para armazenar senhas com Bcrypt no MySQL

O Bcrypt não é uma biblioteca nativa do Python, então você precisa instalá-la usando pip. Para instalar o bcrypt, você pode executar o seguinte comando no terminal:

pip install bcrypt mysql-connector-python

Aqui está um exemplo simples de como você pode usar o bcrypt para armazenar senhas de forma segura em um banco de dados em Python:

safe_password.py

Teste do script Python safe_password.py


python3 safe_password.py

Considerações finais:

A segurança das senhas dos usuários é uma responsabilidade crucial para qualquer desenvolvedor de software. Armazenar senhas de forma segura utilizando algoritmos robustos como bcrypt é essencial para proteger os dados dos usuários contra acessos não autorizados. Evitar práticas inseguras, como armazenamento em texto simples ou o uso de algoritmos de hash fracos, é fundamental para garantir a integridade e a confidencialidade das informações dos usuários.

Feito!

Nenhum comentário:

Postar um comentário