it-swarm.it

Scopo di Django impostazione "SECRET_KEY"

Qual è esattamente il punto di SECRET_KEY in django? Ho fatto alcune ricerche su Google e verificato i documenti ( https://docs.djangoproject.com/en/dev/ref/settings/#secret-key ), ma stavo cercando un altro spiegazione approfondita di questo e perché è richiesto.

Ad esempio, cosa potrebbe accadere se la chiave fosse compromessa/altri sapessero cosa fosse? Grazie.

125
David542

È usato per fare hash. Guarda:

>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()
76
Roshan Mathews

documentazione di Django per la firma crittografica copre gli usi dell'impostazione "SECRET_KEY":

Questo valore [il SECRET_KEY impostazione] è la chiave per proteggere i dati firmati: è fondamentale tenerlo al sicuro, o gli aggressori potrebbero usarlo per generare i propri valori firmati.

(Questa sezione fa anche riferimento a il Django documentazione per l'impostazione "SECRET_KEY" .)

L'API per la firma crittografica in Django è disponibile per qualsiasi app per firme crittograficamente sicure sui valori. Django stesso fa uso di questo in varie funzionalità di livello superiore:

  • Firma di dati serializzati (ad es. Documenti JSON).

  • Token univoci per una sessione utente, richiesta di reimpostazione password, messaggi, ecc.

  • Prevenzione di attacchi cross-site o replay aggiungendo (e quindi prevedendo) valori univoci per la richiesta.

  • Generare un sale unico per le funzioni di hash.

Quindi, la risposta generale è: ci sono molte cose in un'app Django che richiede una firma crittografica e l'impostazione 'SECRET_KEY' è la chiave usata per quelle. Deve avere una crittografia forte quantità di entropia (difficile da indovinare per i computer) e unica tra tutte le istanze Django.

26
bignose

Secondo la Django Documentazione su SECRET_KEY :

La chiave segreta viene utilizzata per:

  • Tutte le sessioni se si utilizza un back-end di sessione diverso da Django.contrib.sessions.backends.cache o si utilizza il valore predefinito get_session_auth_hash().
  • Tutti i messaggi se si utilizza CookieStorage o FallbackStorage.
  • Tutti i token PasswordResetView.
  • Qualsiasi utilizzo della firma crittografica, a meno che non venga fornita una chiave diversa.

Se si ruota la chiave segreta, tutto quanto sopra verrà invalidato. Le chiavi segrete non vengono utilizzate per le password degli utenti e la rotazione delle chiavi non li influenzerà.

11
Michael B