Django设置'SECRET_KEY'的目的

django中的SECRET_KEY究竟是什么意思? 我做了一些谷歌search,并检出了文档( 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() 

用于encryption签名的Django文档涵盖了“SECRET_KEY”设置的用法:

这个值[ SECRET_KEY设置]是保护​​签名数据的关键 – 保持这一安全性至关重要,或者攻击者可以使用它来生成自己的签名值。

(这部分也是从“SECRET_KEY”设置的Django文档中引用的 。)

Django中的encryption签名API可用于任何应用程序的值上的encryption签名。 Django本身在各种高级function中使用它:

  • 签署序列化数据 (例如JSON文档)。

  • 用户会话的唯一令牌,密码重置请求,消息等

  • 通过添加(然后期待)请求的唯一值来防止跨站点或重放攻击。

  • 为哈希函数生成一个独特的盐。

所以,一般的答案是:在Django应用程序中有很多事情需要encryption签名,SECRET_KEY设置是用于这些的密钥。 它需要有一个密码学上强的数量(难以计算机猜测),并且在所有的Django实例之间是唯一的。