Dans Django, une clé secrète joue un rôle essentiel dans l’amélioration de la sécurité de votre application. Elle aide à gérer les sessions utilisateur, protège contre les attaques de type Cross-Site Request Forgery (CSRF) et protège vos données en générant et en vérifiant les signatures cryptographiques, entre autres choses.
Vous devez toujours garder la clé secrète de votre projet en sécurité. En l’exposant, vous exposez votre application à des attaques malveillantes de la part de pirates, ce qui compromet sa sécurité. Si votre clé secrète est compromise, vous devez savoir comment en générer une nouvelle afin de réduire l’impact négatif sur votre application.
Comment votre clé secrète Django peut-elle être exposée ?
Vous pouvez accidentellement rendre publique votre clé secrète Django si vous la livrez sans le savoir à git ou à un dépôt de code source similaire. Cette erreur est fréquente chez les nouveaux programmeurs qui découvrent GitHub. Lorsque cela se produit, vous pouvez faire l’une des choses suivantes :
- Supprimer le commit.
- Remplacer entièrement la clé secrète.
La suppression du commit n’est pas forcément la meilleure option, car l’historique du commit peut toujours être accessible par divers moyens, comme des copies en cache sur GitHub ou d’autres systèmes distribués. La chose la plus sûre à faire dans une telle situation est de supposer que votre clé secrète est déjà compromise.
Vous devez générer une nouvelle clé secrète pour remplacer celle qui a été compromise et la protéger en utilisant des variables d’environnement. Dans tous les cas, vous devriez apprendre à générer une nouvelle clé secrète dans Django afin de protéger votre application contre les attaques de type Cross-Site Request Forgery (CSRF).
Comment générer une nouvelle clé secrète dans Django
Django fournit une fonction appelée get_random_secret_key() qui vous aide à générer une nouvelle clé secrète chaque fois que vous l’appelez. La fonction get_random_secret_key() est une fonction utilitaire qui utilise la fonction secrets en Python pour générer une clé secrète sécurisée de 50 caractères.
Pour générer une nouvelle clé secrète avec la fonction get_random_secret_key(), ouvrez votre interface de ligne de commande (CLI) et tapez cette commande :
python manage.py shell -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
La commande ci-dessus importe la fonction get_random_secret_key() de l’application django.core.management.utils et imprime ensuite une nouvelle clé secrète de 50 caractères, que vous pouvez utiliser dans votre projet. Avant d’exécuter la commande ci-dessus, assurez-vous que vous êtes dans le répertoire racine de votre projet, c’est-à-dire au même endroit que le fichier manage.py dans votre projet.
Vous pouvez exécuter la même commande en dehors de votre CLI en créant un fichier Python et en y collant cet extrait de code :
# import the get_random_secret_key() function
from django.core.management.utils import get_random_secret_key
secret_key = get_random_secret_key()
print(secret_key)
Vous pouvez exécuter le code en tapant ceci dans votre CLI :
python fileName.py
La commande ci-dessus devrait imprimer une nouvelle clé secrète de 50 caractères que vous pourrez utiliser dans votre projet.
Comment protéger votre clé secrète avec des variables d’environnement
Vous n’avez probablement pas envie de changer votre clé secrète à chaque fois que vous faites un commit GitHub. Un moyen efficace de garder votre clé secrète en sécurité est de la stocker dans une variable d’environnement. Les variables d’environnement sont des valeurs que vous pouvez définir en dehors de votre base de code, mais auxquelles votre programme peut toujours accéder pendant l’exécution. Elles peuvent stocker de la configuration, des clés d’API, des identifiants de base de données, etc.
Vous pouvez stocker vos variables d’environnement dans un fichier nommé .env et les exclure de votre dépôt git. Vous pouvez le faire en créant un fichier appelé .gitignore dans votre projet. Le fichier .gitignore contient une liste de fichiers et de dossiers que Git ne suivra pas.
Les types de fichiers et les structures de répertoires varient d’un projet à l’autre, mais il existe des valeurs par défaut raisonnables que vous pouvez appliquer pour chaque langue. Vous pouvez trouver une liste de modèles .gitignore dans le dépôt gitignore de GitHub. Les étapes suivantes vous montrent comment utiliser le fichier .gitignore avec des variables d’environnement dans Django.
1. Créer un fichier .gitignore
Dans votre répertoire de base – l’emplacement de votre manage.py créer un fichier .gitignore et copiez-y le contenu de ce fichier GitHub. Ce fichier est un exemple de .gitignore pour les projets Python qui exclut les fichiers communs que vous ne voudrez pas dans votre dépôt.
Vous pouvez également ajouter un fichier .gitignore à votre projet lors de la création d’un dépôt sur GitHub. Pour ce faire, cliquez sur l’icône Ajouter .gitignore rechercher Python et le sélectionner.
2. Créer un fichier .env
Dans votre répertoire de base, créez un fichier appelé .env. Ce fichier stockera toutes vos variables d’environnement. Copiez et collez votre clé secrète dans ce fichier (supprimez les guillemets et les espaces qui l’entourent). Voici un exemple :
SECRET_KEY=x#)_v1dtrlqvc61*025t^u4*-2h^kq&fmaw-ifgkppjxpyhh1%
Ouvrez le fichier .gitignore et confirmez que le fichier .env est présent. Si ce n’est pas le cas, vous pouvez l’ajouter en écrivant le nom du fichier seul sur une ligne :
.env
3. Installer le paquetage python-dotenv
Ouvrez votre CLI, et installez le paquet python-dotenv Le paquet python-dotenv a été ajouté comme dépendance.
pip install python-dotenv
4. Modifier le fichier settings.py
Dans votre fichier settings.py importez les paquets suivants :
import os
from dotenv import load_dotenv
Ensuite, chargez les variables d’environnement de votre .env dans votre fichier settings.py en appelant la fonction load_dotenv() fonction :
load_dotenv()
Enfin, remplacez votre SECRET_KEY avec cette ligne de code :
SECRET_KEY = os.environ.get('SECRET_KEY')
Vous pouvez exécuter votre serveur de développement pour confirmer que la configuration ci-dessus fonctionne. Si c’est le cas, votre projet devrait s’exécuter comme prévu. La commande ci-dessous démarre votre serveur de développement.
python manage.py runserver
La sécurité de votre clé secrète grâce aux variables d’environnement
L’exposition de votre clé secrète peut vous poser de nombreux problèmes en tant que développeur. Vous ne serez pas toujours en mesure de récupérer votre projet après une attaque, en particulier dans un environnement de production.
Pour éviter ces effets secondaires négatifs, stockez toujours votre clé secrète dans une variable d’environnement et utilisez un fichier .gitignore pour le garder en dehors de votre dépôt git.