Цель настройки Django " секретный ключ’

в чем именно заключается точка SECRET_KEY в Django? Я сделал несколько поисков google и проверил документы (https://docs.djangoproject.com/en/dev/ref/settings/#secret-key), но я искал более глубокое объяснение этого, и почему это требуется.

например, что может произойти, если ключ был скомпрометирован / другие знали, что это было? Спасибо.

3 ответов


используется для создания хэшей. Смотри:

>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()

на документация Django для криптографической подписи охватывает использование параметра "SECRET_KEY":

Это значение [the SECRET_KEY setting] является ключом к защите подписанных данных-важно, чтобы вы сохраняли это в безопасности, или злоумышленники могли бы использовать его для создания своих собственных подписанных значений.

(этот раздел также ссылается документация Django для настройки "SECRET_KEY".)

криптографическая подпись API в Django доступен для любого приложения для криптографически безопасных подписей на значениях. Сам Django использует это в различных функциях более высокого уровня:

  • подписание сериализованных данных (например, документы JSON).

  • уникальные токены для сеанса пользователя, запроса на сброс пароля, сообщений и т. д.

  • предотвращение межсайтовых или повторных атак путем добавления (а затем ожидания) уникальных значений для запрос.

  • создание уникальной соли для хэш-функций.

Итак, общий ответ: в приложении Django есть много вещей, которые требуют криптографической подписи, и параметр "SECRET_KEY" является ключом, используемым для них. Он должен иметь криптографически сильное количество энтропии (трудно угадать компьютеры) и уникальный между всеми экземплярами Django.


согласно документации Django на SECRET_KEY:

секретный ключ используется для:

  • все сеансы, если вы используете любой другой бэкэнд сеанса, чем django.contrib.sessions.backends.cache, или использовать по умолчанию get_session_auth_hash().
  • все сообщения, если вы используете CookieStorage или FallbackStorage.
  • все маркеры PasswordResetView.
  • любое использование криптографической подписи, если не указан другой ключ.

если вы повернете свой секретный ключ, все вышеперечисленное будет признано недействительным. Секретные ключи не используются для паролей пользователей и ротация ключей на них не повлияет.