Назначение настройки Django 'SECRET_KEY

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

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

Ответ 1

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

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

Ответ 2

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

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

(Этот раздел также ссылается на документацию Django для параметра SECRET_KEY.

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

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

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

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

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

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