我进行了几次谷歌搜索并查看了文档(https://docs.djangoproject.com/en/dev/ref/settings/#secret-key),但我希望能够得到更深入的解释,以及为什么需要这样做。
例如,如果密钥被泄露或其他人知道它是什么,会发生什么?
我进行了几次谷歌搜索并查看了文档(https://docs.djangoproject.com/en/dev/ref/settings/#secret-key),但我希望能够得到更深入的解释,以及为什么需要这样做。
例如,如果密钥被泄露或其他人知道它是什么,会发生什么?
它用于生成哈希值。看下面:
>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()
SECRET_KEY
的安全。使用SECRET_KEY
更类似于在签名哈希(例如HMAC)中使用密钥,这种情况下,密钥必须保密(如果性能不是考虑因素,可能会使用HMAC)。 - Travis JensenDjango加密签名文档介绍了如何使用“SECRET_KEY”设置:
这个值[即“SECRET_KEY”设置]是保护签名数据的关键 - 您必须确保它安全,否则攻击者可能会使用它来生成自己的签名值。
(此部分还可以从“SECRET_KEY”设置的Django文档中引用。)
Django的加密签名API可用于任何应用程序,以对值进行加密安全的签名。 Django本身在各种高级功能中使用此功能:
签名序列化数据(例如JSON文档)。
为用户会话、密码重置请求、消息等生成唯一令牌。
通过添加(然后期望)请求的唯一值来防止跨站点或重放攻击。
生成哈希函数的唯一盐值。
因此,一般的答案是:Django应用程序中有许多需要进行加密签名的事情,“SECRET_KEY”设置是用于这些事情的关键。它需要具有密码安全的熵量(难以让计算机猜测),并且在所有Django实例之间是唯一的。
SECRET_KEY
设置? - Adam Parkin秘密密钥用于以下内容:
- 如果使用除
django.contrib.sessions.backends.cache
之外的任何其他会话后端,或者使用默认的get_session_auth_hash()
,则用于所有会话。- 如果使用
CookieStorage
或FallbackStorage
,则用于所有消息。- 用于所有PasswordResetView令牌。
- 除非提供了不同的密钥,否则用于任何加密签名的使用。
如果您旋转秘密密钥,则上述所有内容都将无效。秘密密钥不用于用户密码,密钥旋转不会影响它们。
SECRET_KEY
被轮换,以下是有用的信息。+1 - Hassan Baig