我做了一些谷歌搜索,并检查了文档( www.example.com ),但我正在寻找一个更深入的解释,为什么它是必需的。例如,如果密钥被泄露/其他人知道它是什么,会发生什么?
lo8azlld1#
它用于生成哈希。你看:
>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()
hgb9j2n62#
Django documentation for cryptographic signing涵盖了“SECRET_KEY”设置的用法:此值[SECRET_KEY设置]是保护签名数据的关键-确保其安全至关重要,否则攻击者可能会使用它生成自己的签名值。(This部分也引用了Django文档中的'SECRET_KEY'设置。)Django中的加密签名API可用于任何应用程序对值进行加密安全签名。Django本身在各种更高级别的特性中使用了这一点:
SECRET_KEY
所以,一般的答案是:Django应用中有很多东西需要加密签名,'SECRET_KEY'设置是用于这些的密钥。它需要有一个加密的强大熵量(计算机很难猜测),并且在所有Django示例之间是唯一的。
lmvvr0a83#
根据**SECRET_KEY**上的Django文档:密钥用于:
django.contrib.sessions.backends.cache
get_session_auth_hash()
CookieStorage
FallbackStorage
如果你轮换你的密钥,以上所有的都将失效。密钥不用于用户的密码,密钥轮换也不会影响用户的密码。
3条答案
按热度按时间lo8azlld1#
它用于生成哈希。你看:
hgb9j2n62#
Django documentation for cryptographic signing涵盖了“SECRET_KEY”设置的用法:
此值[
SECRET_KEY
设置]是保护签名数据的关键-确保其安全至关重要,否则攻击者可能会使用它生成自己的签名值。(This部分也引用了Django文档中的'SECRET_KEY'设置。)
Django中的加密签名API可用于任何应用程序对值进行加密安全签名。Django本身在各种更高级别的特性中使用了这一点:
所以,一般的答案是:Django应用中有很多东西需要加密签名,'SECRET_KEY'设置是用于这些的密钥。它需要有一个加密的强大熵量(计算机很难猜测),并且在所有Django示例之间是唯一的。
lmvvr0a83#
根据**
SECRET_KEY
**上的Django文档:密钥用于:
django.contrib.sessions.backends.cache
以外的任何其他会话后端,或者使用的是默认的get_session_auth_hash()
**。CookieStorage
或FallbackStorage
**时的所有消息。如果你轮换你的密钥,以上所有的都将失效。密钥不用于用户的密码,密钥轮换也不会影响用户的密码。