Quelques outils pour gérer les clés secrètes en Django

Quelques outils pour gérer les clés secrètes en Django

Cet article est repris de l’archive et appartient à l’ancien propriétaire du site, il a été repris sur celui-ci dans une forme d’hommage

On ne veut pas mettre sa SECRET_KEY en prod, et utiliser un service pour générer la clé, ça va deux minutes.

Générer une clé secrète:

import random import string   def secret_key(size=50): pool = string.ascii_letters + string.digits + string.punctuation return «  ».join(random.SystemRandom().choice(pool) for i in range(size))

Générer une clé secrete avec une commande manage.py:

from django.core.management.base import BaseCommand, CommandError from polls.models import Question as Poll   class Command(BaseCommand): help = ‘Generate a secret key’   def add_arguments(self, parser): parser.add_argument(‘size’, default=50, type=int)   def handle(self, *args, **options): self.stdout.write(secret_key(options[‘size’]))

A mettre dans ./votreapp/management/command/generate_secret_key.py 🙂

Une fonction pour lire la clé depuis un fichier texte ou générer la clé si elle n’existe pas:

import io import os   try: import pwd except ImportError: pass   try: import grp except ImportError: pass     def secret_key_from_file( file_path, create=True, size=50, file_perms=None, # unix uniquement file_user=None, # unix uniquement file_group=None # unix uniquement ): try: with io.open(file_path) as f: return f.read().strip() except IOError as e: if e.errno == 2 and create: with io.open(file_path, ‘w’) as f: key = secret_key(size) f.write(key)   if any((file_perms, file_user, file_group)) and not pwd: raise ValueError(‘File chmod and chown are for Unix only’)   if file_user: os.chown(file_path, uid=pwd.getpwnam(file_user).pw_uid)   if file_group: os.chown(file_path, gid=grp.getgrnam(file_group).gr_gid)   if file_perms: os.chmod(file_path, int(str(file_perms), 8))   return key   raise

Et une fonction pour récupérer la clé depuis une variable d’environnement ou un fichier:

def get_secret_key( file_path=None, create=True, size=50, file_perms=None, file_user=None, file_group=None, env_var= »DJANGO_SECRET_KEY » ): try: return os.environ[env_var] except KeyError: if file_path: return secret_key_from_file(file_path, create=create, size=size) raise

Le but de cette dernière est d’avoir ça dans son fichier de settings:

Découvrir aussi  Comment parser du HTML avec BeautifulSoup ?

SECRET_KEY = get_secret_key('secret_key')

Et de foutre ‘secret_key’ dans son .gitignore.

Comme ça:

  • Si on n’a pas de clé secrète, on en génère une.
  • Si on a une, elle est dans un fichier qui n’est PAS dans settings.py.
  • On peut commiter settings.py. Chaque env de dev et prod a sa clé secrète automatiquement.
  • On peut overrider la clé avec une variable d’environnement si on le souhaite.

4.2/5 - (27 votes)
John Loerse

A propos de l'auteur

John Loerse est un spécialiste du marketing qui a une passion pour la rédaction. Il a travaillé dans plusieurs entreprises au fil des ans, acquérant une grande expérience dans le domaine du marketing et de la communication. Grâce à sa solide expertise en rédaction et en communication, John a réussi à aider de nombreuses entreprises à atteindre leurs objectifs de marketing et à se développer de manière significative. Finalement, John a décidé de rejoindre Sametmax, une entreprise de mise en relation de freelance et entreprises, pour poursuivre sa carrière dans le marketing et la rédaction. Chez Sametmax, John travaille avec une équipe talentueuse de professionnels pour aider les entreprises à trouver les freelances les plus qualifiés et à réaliser des projets de qualité supérieure.

Laisser un commentaire