Garder vos clés privées hors des référentiels de code est vital pour la sécurité. Découvrez comment procéder et comment récupérer si vous avez déjà fait l'erreur.
Dans Django, une clé secrète joue un rôle essentiel dans l'amélioration de la sécurité de votre application. Il aide à gérer les sessions utilisateur, protège contre les attaques CSRF (Cross-Site Request Forgery) et protège vos données en générant et en vérifiant des signatures cryptographiques, entre autres.
Vous devez garder la clé secrète de votre projet en sécurité à tout moment. L'exposer laissera votre application vulnérable aux attaques malveillantes des pirates, compromettant sa sécurité. Si votre clé secrète est compromise, vous devez savoir comment en générer une nouvelle pour réduire l'impact négatif sur votre application.
Comment votre clé secrète Django peut-elle être exposée?
Vous pouvez accidentellement rendre votre clé secrète Django publique si vous la validez sans le savoir sur git ou un référentiel de code source similaire. Cette erreur est fréquente chez les nouveaux programmeurs qui sont encore
en savoir plus sur GitHub. Lorsque cela se produit, vous pouvez effectuer l'une des actions suivantes :- Supprimez le commit.
- Remplacez entièrement la clé secrète.
La suppression du commit n'est peut-être pas la meilleure option, car l'historique des commits peut toujours être accessible par divers moyens, tels que 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 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 pour protéger votre application de choses comme Attaques CSRF (Cross-Site Request Forgery).
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 le secrets module 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 "depuis django.core.management.utils importez get_random_secret_key; imprimer (get_random_secret_key())"
La commande ci-dessus importe la fonction get_random_secret_key() de django.core.management.utils puis imprime 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 emplacement que le manage.py fichier 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 :
# importez la fonction get_random_secret_key()
depuis django.core.management.utils importer get_random_secret_key
clé_secrète = get_random_secret_key()
imprimer (secret_key)
Vous pouvez exécuter le code en saisissant ceci dans votre CLI :
nom_fichier python.py
La commande ci-dessus devrait imprimer une nouvelle clé secrète de 50 caractères que vous pouvez utiliser dans votre projet.
Comment protéger votre clé secrète avec des variables d'environnement
Vous ne voulez probablement pas changer votre clé secrète à chaque fois que vous faites un commit GitHub. Un moyen efficace de protéger votre clé secrète consiste à 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, auxquelles votre programme peut toujours accéder pendant l'exécution. Ils peuvent stocker la configuration, les clés API, les informations d'identification de la base de données, etc.
Vous pouvez stocker vos variables d'environnement dans un fichier nommé .env et les exclure de votre référentiel 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 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 fichier—créer un .gitignore fichier et copiez le contenu de ce Fichier GitHub dans ça. Ce fichier est un exemple .gitignore pour les projets Python qui exclut les fichiers communs que vous ne voudrez pas dans votre référentiel.
Vous pouvez également ajouter un fichier .gitignore à votre projet lors de la création d'un référentiel sur GitHub. Pour cela, cliquez sur le Ajouter .gitignore option, recherchez Python et sélectionnez-le.
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 .gitignore déposer et confirmer que le .env le nom du fichier est dedans. Si ce n'est pas le cas, vous pouvez l'ajouter en écrivant le nom du fichier seul sur une ligne :
.env
3. Installez le paquet python-dotenv
Ouvrez votre CLI et installez le python-dotenv package en tant que dépendance.
pip installer python-dotenv
4. Modifier votre fichier settings.py
Dans ton paramètres.py fichier, importez les packages suivants :
importer os
depuis dotenv importer load_dotenv
Ensuite, chargez les variables d'environnement à partir de votre .env fichier dans votre paramètres.py fichier en appelant le load_dotenv() fonction:
load_dotenv()
Enfin, remplacez votre CLEF SECRÈTE variable avec cette ligne de code :
SECRET_KEY = os.environ.get('CLEF SECRÈTE')
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 fonctionner comme prévu. La commande ci-dessous démarrera votre serveur de développement.
serveur d'exécution python manage.py
Gardez votre clé secrète en sécurité avec des variables d'environnement
L'exposition de votre clé secrète peut vous causer de nombreux problèmes en tant que développeur. Vous ne pourrez peut-être pas toujours 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 .gitignore fichier pour le garder hors de votre référentiel git.