Informações confidenciais seguras no Django no GitHub
Construir projetos e software e compartilhá-los com o mundo no GitHub é um processo divertido e empolgante. Gostamos de adicionar recursos interessantes e atraentes aos nossos aplicativos e enviar o código para o GitHub usando o git. Ainda assim, às vezes tendemos a esquecer um dos aspectos mais críticos do desenvolvimento de software: segurança.
Ao construir software, temos que garantir que o software seja seguro e não tenha brechas potenciais para uma violação de dados.
Django, a estrutura da web, vem com segurança robusta. O sistema de autenticação do Django é poderoso. Django tem um settings.py onde a maioria dos dados sensíveis estão presentes. Portanto, armazenar esse arquivo no GitHub pode ser uma decisão perigosa.
Mas não se preocupe. Existem algumas maneiras de enviar o código ao GitHub e, ao mesmo tempo, garantir a segurança.
Proteja informações confidenciais no Django usando variáveis de ambiente
Variáveis de ambiente são algumas variáveis cujos valores são armazenados fora do programa e são lidos a partir do programa para acessar as informações. Essas variáveis são armazenadas em um arquivo .env.
Primeiro, crie um arquivo .env. Então, dentro do arquivo .gitignore, adicione .env. Essa adição garantirá que o arquivo .env não seja carregado no GitHub.
Agora você precisará de um pacote Python para lidar com esses arquivos. O nome do pacote é Decouple. Use o seguinte comando pip para instalar o pacote.
pip install python-decouple
Ou,
pip3 install python-decouple
Dentro do arquivo .env, adicione as informações confidenciais. Essas informações podem ser a chave secreta do seu projeto Django, suas credenciais de banco de dados, seu id de e-mail e senha, suas chaves de API, etc. O pacote Decouple Python procurará automaticamente por esse arquivo dentro do projeto Django.
Armazene as informações da seguinte maneira. Certifique-se de seguir a mesma sintaxe: sem espaços antes e depois do sinal = e sem aspas adicionadas para representar as strings.
SECRET_KEY=abcdefghijklmnopqrstuvwxyz0123456789
DEBUG=True
DATABASE_NAME=HELLO_DJANGO
DATABASE_USERNAME=U_HELLO
DATABASE_PASSWORD=hA8(scA@!fg3*sc&xaGh&6%-l<._&xCf
DATABASE_HOST=127.0.0.1
DATABASE_PORT=127.0.0.1
WASD_API_KEY=abcdefghijklmnopqrstuvwxyz0123456789
PQRS_API_KEY=abcdefghijklmnopqrstuvwxyz0123456789
EMAIL=qwerty@wasd.com
PASSWORD=abcdefghijklmnopqrstuvwxyz0123456789
Conforme mencionado acima, geralmente e devemos manter todos os dados confidenciais no arquivo settings.py. Faremos o mesmo aqui também, mas não adicionaremos os valores diretamente. Iremos lê-los neste .env que acabamos de criar.
Dentro de settings.py, podemos recuperar os valores acima da seguinte forma.
import os
from decouple import config
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY = config("SECRET_KEY") # Here
DEBUG = config("DEBUG", cast=bool) # Here
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql_psycopg2",
"NAME": config("DATABASE_NAME"), # Here
"USER": config("DATABASE_USERNAME"), # Here
"PASSWORD": config("DATABASE_PASSWORD"), # Here
"HOST": config("DATABASE_HOST"), # Here
"PORT": config("DATABASE_PORT", cast=int), # Here
}
}
WASD_API_KEY = config("WASD_API_KEY")
PQRS_API_KEY = config("PQRS_API_KEY")
EMAIL = config("EMAIL")
PASSWORD = config("PASSWORD")
config tem um parâmetro cast que define para qual tipo de dados o valor deve ser convertido. Por padrão, o Decouple lê todos os valores como strings. Portanto, este parâmetro cast pode ser usado para converter os valores para o tipo de dados desejado.
É isso. Agora, todos os dados confidenciais estão seguros em um arquivo .env e, contanto que você não faça upload desse arquivo para o GitHub, as informações estarão seguras. Além disso, o projeto também não vai quebrar porque as variáveis estão intactas onde estavam anteriormente. A única coisa que mudou é a maneira como atribuímos valores a eles.
