我犯了一个错误,将Django项目的密钥提交到公共存储库中
根据文件,这把钥匙应该是保密的
Django项目是实时的,已经运行了一段时间,有一些活跃的用户。如果我更改密钥,会产生什么影响?将删除任何现有用户、cookie、会话等。。受到影响?显然,新的密钥将不再存储在公共位置
编辑:此答案基于django 1.5
SECRET\u KEY在很多地方都有使用,我将首先指出它会对哪些方面产生影响,然后尝试查看该列表,并给出精确的影响解释
直接或间接使用SECRET\u KEY的物品列表:
- JSON对象签名
- 盐渍HMAC或播种随机引擎的加密函数,影响:
- 密码重置令牌
- 评论表单安全性可防止伪造的帖子请求
- 形式安全
- 防止消息篡改,因为消息框架可能使用cookies在视图之间传递消息
- 保护会话数据并创建随机会话密钥以避免篡改
- 为大多数密码哈希器创建随机salt
- 如有必要,创建随机密码
- 使用
startproject时创建自身 - 创建CSRF密钥
实际上,这里列出的许多项都通过django.utils.crypt.get\u random\u string()使用SECRET\u KEY来为随机引擎种子。这不会受到SECRET\u KEY值更改的影响
价值变化直接影响的用户体验包括:
- 会话时,数据解码将中断,这对任何会话后端(cookie、数据库、基于文件或缓存)都有效
- 已发送的密码重置令牌将不起作用,用户必须请求一个新令牌
- 注释表单(如果使用
django.contrib.comments)将不会验证它是否在值更改之前请求并在值更改之后提交。我认为这很小,但可能会让用户感到困惑 - 消息(来自
django.contrib.messages)不会在与注释表单相同的时间条件下验证服务器端
更新:现在正在使用django 1.9.5,快速查看源代码,我得到了几乎相同的答案。以后可能会进行彻底检查