web-dev-qa-db-ja.com

Django設定「SECRET_KEY」の目的

ジャンゴのSECRET_KEYのポイントは正確に何ですか?私はいくつかのグーグル検索を行ってドキュメントをチェックアウトしました( https://docs.djangoproject.com/en/dev/ref/settings/#secret-key )、しかし私はもっと探していましたこれの詳細な説明と、それが必要な理由。

たとえば、キーが危険にさらされた/他の人がそれが何であるかを知っていたらどうなりますか?ありがとうございました。

125
David542

ハッシュを作成するために使用されます。見て:

>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

暗号署名のDjangoドキュメント は、「SECRET_KEY」設定の使用法をカバーしています。

この値[SECRET_KEY設定]は、署名されたデータを保護するための鍵です。これを安全に保つことが重要です。

(このセクションは Django「SECRET_KEY」設定のドキュメント からも参照されています。)

Djangoの暗号署名APIは、値の暗号的に安全な署名のアプリで利用可能です。Django自体は、さまざまな高レベル機能でこれを利用します。

  • シリアル化されたデータの署名 (例:JSONドキュメント)。

  • ユーザーセッション、パスワードリセット要求、メッセージなどの一意のトークン.

  • リクエストに一意の値を追加することにより、クロスサイト攻撃またはリプレイ攻撃を防止します。

  • ハッシュ関数用のユニークなソルトを生成します。

したがって、一般的な答えは次のとおりです。Djangoアプリには暗号化署名が必要であり、「SECRET_KEY」設定がそれらに使用されるキーです。暗号的に強力である必要がありますエントロピーの量(コンピューターが推測しにくい)およびすべてのインスタンス間で一意Django=.

26
bignose

Djangoのドキュメント_SECRET_KEY_

秘密鍵は次の目的で使用されます。

  • _Django.contrib.sessions.backends.cache_以外のセッションバックエンドを使用している場合、またはデフォルトget_session_auth_hash()
  • CookieStorageまたはFallbackStorageを使用している場合、すべてのメッセージ。
  • すべてのPasswordResetViewトークン。
  • 別のキーが提供されない限り、暗号署名の使用。

秘密鍵をローテーションすると、上記のすべてが無効になります。秘密鍵はユーザーのパスワードには使用されず、鍵のローテーションはそれらに影響しません。

11
Michael B