旋转你的django秘密
django-rotate-secret-ke的Python项目详细描述
有助于在不丢失用户会话的情况下安全地旋转密钥,这意味着无需注销用户。
与现代django版本兼容。在编写本文时,它包括了Python3.7上的1.11和2.0。
我还没有找到任何图书馆允许我们在我们的生产网站上这样做,所以我开始了图书馆。
问题
一旦在生产中更改SECRET_KEY,所有旧会话和cookie都将失效, 用户将注销,会话中的数据将丢失。
如果你的SECRET_KEY被破坏了,这很好! 但如果你只是为了安全起见想定期轮换,那就不好了。
此库允许您继续支持使用旧密钥签名的旧会话, 如果用户访问网站,则使用新的密钥重写它们。
因此,最佳计划将是
- 您决定旋转密钥
- 安装django-rotate-secret-key并配置
- 在有限的时间(x个月)内支持这两个键
- 回滚django-rotate-secret-key并保持密钥不变(删除旧密钥)
如果用户在X个月后返回网站,其会话将无效。 但对于所有普通用户来说,这应该是无缝的过渡。
兼容性
如果您使用的是由django-rest-framework-jwt创建的jwt令牌,则当前包不兼容。但它会 在版本1.0中受支持。
得到它
$ pip install django-rotate-secret-key
安装它
这是安全的,即使在你决定旋转你的钥匙之前, 在您更改设置之前,它基本上不起作用。
INSTALLED_APPS = ( ... 'rotatesecretkey', ... )
设置
将AuthenticationMiddleware替换为RotateAuthenticationMiddleware:
MIDDLEWARE = [ ... # 'django.contrib.auth.middleware.AuthenticationMiddleware', 'rotatesecretkey.middleware.RotateAuthenticationMiddleware', ... ]
更换会话引擎:
SESSION_ENGINE = 'rotatesecretkey.sessions'
将旧密钥添加到旧密钥中,并创建新的SECRET_KEY。:
SECRET_KEY = 'NEWRANDOMKEY' OLD_SECRET_KEY = 'your_previous_secret_key_that_you_want_to_support'
一旦这些更改生效,您的网站将解码旧会话 旧的秘密密钥并用新的SECRET_KEY将其放弃。
一段时间后(比如1或2个月),您应该回滚这些更改,并只保留SECRET_KEY。:
SECRET_KEY = 'NEWRANDOMKEY'
你不想永远支持OLD_SECRET_KEY,但是要足够长的时间来给你的访问者 有机会访问网站并用新密钥重写他们的会话。