Sécuriser les informations sensibles dans Django sur GitHub

Vaibhav Vaibhav 29 juin 2021
Sécuriser les informations sensibles dans Django sur GitHub

Construire des projets et des logiciels et les partager avec le monde sur GitHub est un processus amusant et passionnant. Nous aimons ajouter des fonctionnalités intéressantes et convaincantes à nos applications et transmettre le code à GitHub à l’aide de git. Pourtant, nous avons parfois tendance à oublier l’un des aspects les plus critiques du développement logiciel : la sécurité.

Lors de la création d’un logiciel, nous devons nous assurer que le logiciel est sûr et ne présente pas de failles potentielles pour une violation de données.

Django, le framework web, est livré avec une sécurité robuste. Le système d’authentification de Django est puissant. Django a un settings.py où la plupart des données sensibles sont présentes. Par conséquent, stocker un tel fichier sur GitHub pourrait être une décision dangereuse.

Mais ne vous inquiétez pas. Il existe plusieurs façons de pousser le code sur GitHub et d’assurer la sécurité en même temps.

Sécuriser les informations sensibles dans Django à l’aide de variables d’environnement

Les variables d’environnement sont des variables dont les valeurs sont stockées en dehors du programme, et elles sont lues à partir du programme pour accéder aux informations. Ces variables sont stockées dans un fichier .env.

Tout d’abord, créez un fichier .env. Ensuite, à l’intérieur du fichier .gitignore, ajoutez .env. Cet ajout garantira que le fichier .env n’est pas téléchargé sur GitHub.

Vous aurez maintenant besoin d’un package Python pour gérer ces fichiers. Le nom du package est Decouple. Utilisez la commande pip suivante pour installer le package.

pip install python-decouple

Ou alors,

pip3 install python-decouple

Dans le fichier .env, ajoutez les informations sensibles. Ces informations peuvent être la clé secrète de votre projet Django, vos informations d’identification de base de données, votre identifiant de messagerie et votre mot de passe, vos clés API, etc. Le package Python Decouple recherchera automatiquement ce fichier dans le projet Django.

Stockez les informations de la manière suivante. Assurez-vous de suivre la même syntaxe : aucun espace inclus avant et après le signe = et aucun guillemet ajouté pour représenter les chaînes.

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

Comme mentionné ci-dessus, nous devons généralement conserver toutes les données sensibles dans le fichier settings.py. Nous ferons de même ici, mais nous n’ajouterons pas directement les valeurs. Nous les lirons à partir de ce .env que nous venons de créer.

À l’intérieur du settings.py, nous pouvons récupérer les valeurs ci-dessus comme suit.

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 a un paramètre cast qui définit vers quel type de données la valeur doit être convertie. Par défaut, Decouple lit toutes les valeurs sous forme de chaînes. Par conséquent, ce paramètre cast peut être utilisé pour convertir les valeurs dans le type de données souhaité.

C’est ça. Désormais, toutes les données sensibles sont en sécurité dans un fichier .env, et tant que vous ne téléchargez pas ce fichier sur GitHub, les informations sont sécurisées. De plus, le projet ne se cassera pas non plus car les variables sont intactes là où elles étaient présentes auparavant. La seule chose qui a changé, c’est la façon dont nous leur attribuons des valeurs.

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.