Proteger la información confidencial en Django en GitHub

Vaibhav Vaibhav 11 julio 2021
Proteger la información confidencial en Django en GitHub

Crear proyectos y software y compartirlos con el mundo en GitHub es un proceso divertido y emocionante. Disfrutamos de agregar características interesantes y atractivas a nuestras aplicaciones y enviar el código a GitHub usando git. Aún así, a veces tendemos a olvidarnos de uno de los aspectos más críticos del desarrollo de software: la seguridad.

Al crear software, tenemos que asegurarnos de que el software sea seguro y no tenga posibles lagunas para una filtración de datos.

Django, el marco web, viene con una seguridad sólida. El sistema de autenticación de Django es poderoso. Django tiene un settings.py donde está presente la mayoría de los datos confidenciales. Por lo tanto, almacenar un archivo de este tipo en GitHub podría ser una decisión peligrosa.

Pero no se preocupe. Hay algunas formas de insertar el código en GitHub y garantizar la seguridad al mismo tiempo.

Proteger la información confidencial en Django usando variables de entorno

Las variables de entorno son unas variables cuyos valores se almacenan fuera del programa y se leen desde el programa para acceder a la información. Estas variables se almacenan en un archivo .env.

Primero, cree un archivo .env. Luego, dentro del archivo .gitignore, agregue .env. Esta adición asegurará que el archivo .env no se cargue en GitHub.

Ahora necesitará un paquete de Python para manejar estos archivos. El nombre del paquete es Decouple. Utilice el siguiente comando pip para instalar el paquete.

pip install python-decouple

O,

pip3 install python-decouple

Dentro del archivo .env, agregue la información confidencial. Esta información podría ser la clave secreta de su proyecto Django, las credenciales de su base de datos, su identificación de correo electrónico y contraseña, sus claves API, etc. El paquete Decouple Python buscará automáticamente este archivo dentro del proyecto Django.

Almacene la información de la siguiente manera. Asegúrese de seguir la misma sintaxis: no se incluyen espacios antes y después del signo = y no se agregan comillas para representar las cadenas.

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

Como se mencionó anteriormente, generalmente y debemos mantener todos los datos confidenciales en el archivo settings.py. También haremos lo mismo aquí, pero no agregaremos los valores directamente. Los leeremos de este .env que acabamos de crear.

Dentro de settings.py, podemos recuperar los valores anteriores de la siguiente manera.

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 tiene un parámetro cast que define a qué tipo de datos se debe convertir el valor. De forma predeterminada, Decouple lee todos los valores como cadenas. Por lo tanto, este parámetro de “conversión” se puede utilizar para convertir los valores al tipo de datos deseado.

Eso es. Ahora, todos los datos confidenciales están seguros en un archivo .env, y mientras no cargue este archivo en GitHub, la información está segura. Además, el proyecto tampoco se romperá porque las variables están intactas donde estaban presentes anteriormente. Lo único que ha cambiado es la forma en que les asignamos valores.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.