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.