Quel est exactement le point de la SECRET_KEY
au Django? J'ai fait quelques recherches sur Google et vérifié la documentation ( https://docs.djangoproject.com/en/dev/ref/settings/#secret-key ), mais je cherchais un autre explication détaillée de cela, et pourquoi il est nécessaire.
Par exemple, que pourrait-il arriver si la clé était compromise/si les autres savaient ce que c'était? Merci.
Il est utilisé pour faire des hashes. Regardez:
>grep -Inr SECRET_KEY *
conf/global_settings.py:255:SECRET_KEY = ''
conf/project_template/settings.py:61:SECRET_KEY = ''
contrib/auth/tokens.py:54: hash = sha_constructor(settings.SECRET_KEY + unicode(user.id) +
contrib/comments/forms.py:86: info = (content_type, object_pk, timestamp, settings.SECRET_KEY)
contrib/formtools/utils.py:15: order, pickles the result with the SECRET_KEY setting, then takes an md5
contrib/formtools/utils.py:32: data.append(settings.SECRET_KEY)
contrib/messages/storage/cookie.py:112: SECRET_KEY, modified to make it unique for the present purpose.
contrib/messages/storage/cookie.py:114: key = 'Django.contrib.messages' + settings.SECRET_KEY
contrib/sessions/backends/base.py:89: pickled_md5 = md5_constructor(pickled + settings.SECRET_KEY).hexdigest()
contrib/sessions/backends/base.py:95: if md5_constructor(pickled + settings.SECRET_KEY).hexdigest() != tamper_check:
contrib/sessions/backends/base.py:134: # Use settings.SECRET_KEY as added salt.
contrib/sessions/backends/base.py:143: settings.SECRET_KEY)).hexdigest()
contrib/sessions/models.py:16: pickled_md5 = md5_constructor(pickled + settings.SECRET_KEY).hexdigest()
contrib/sessions/models.py:59: if md5_constructor(pickled + settings.SECRET_KEY).hexdigest() != tamper_check:
core/management/commands/startproject.py:32: # Create a random SECRET_KEY hash, and put it in the main settings.
core/management/commands/startproject.py:37: settings_contents = re.sub(r"(?<=SECRET_KEY = ')'", secret_key + "'", settings_contents)
middleware/csrf.py:38: % (randrange(0, _MAX_CSRF_KEY), settings.SECRET_KEY)).hexdigest()
middleware/csrf.py:41: return md5_constructor(settings.SECRET_KEY + session_id).hexdigest()
La documentation Django pour la signature cryptographique couvre les utilisations du paramètre ‘SECRET_KEY’:
Cette valeur [the
SECRET_KEY
setting] est la clé de la sécurisation des données signées. Il est essentiel de le garder en sécurité, sinon les attaquants pourraient l’utiliser pour générer leurs propres valeurs signées.
(Cette section est également référencée depuis la documentation Django pour le paramètre ‘SECRET_KEY’) .)
L'API de signature cryptographique dans Django est disponible dans n'importe quelle application pour les signatures cryptographiquement sécurisées sur des valeurs. Django l'utilise elle-même dans diverses fonctionnalités de niveau supérieur:
Signature de données sérialisées (documents JSON, par exemple).
Jetons uniques pour une session utilisateur, demande de réinitialisation de mot de passe, messages, etc.
Prévention des attaques entre sites ou relecture en ajoutant (puis en espérant) des valeurs uniques pour la demande.
Générer un sel unique pour les fonctions de hachage.
La réponse générale est donc la suivante: il y a beaucoup de choses dans une Django qui nécessitent une signature cryptographique, et le paramètre 'SECRET_KEY' est la clé utilisée pour celles-ci. Elle doit avoir une base cryptographique solide. quantité d'entropie (difficile à deviner pour les ordinateurs) et unique entre toutes les instances Django.
Selon le Django Documentation sur SECRET_KEY
:
La clé secrète est utilisée pour:
- Toutes les sessions si vous utilisez un autre serveur que
Django.contrib.sessions.backends.cache
, ou utilisez la valeur par défautget_session_auth_hash()
.- Tous les messages si vous utilisez
CookieStorage
ouFallbackStorage
.- Tous les jetons PasswordResetView.
- Toute utilisation de la signature cryptographique, sauf si une clé différente est fournie.
Si vous faites pivoter votre clé secrète, tout ce qui précède sera invalidé. Les clés secrètes ne sont pas utilisées pour les mots de passe des utilisateurs et leur rotation ne les affectera pas.