Цель настройки 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
настройка] является ключом к обеспечению безопасности подписанных данных-важно, чтобы вы сохраняли это в безопасности, или злоумышленники могли использовать его для создания своих собственных подписанных значений.(на этот раздел также ссылаются из документация 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.
- любое использование криптографической подписи, если не указан другой ключ.
если вы повернете свой секретный ключ, все вышеперечисленное будет признано недействительным. Секретные ключи не используются для паролей пользователей и ротация ключей не повлияет на них.