旋转你的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,但是要足够长的时间来给你的访问者 有机会访问网站并用新密钥重写他们的会话。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
具有x86javapath的x64机器上x86java上的java JNI未满足链接错误   java将Pixmap的一部分上传到GPU   图像Java位图RLE8格式   java Android studio谷歌广告崩溃应用程序   java如何创建包含未知数量对象的变量?   Java计算给定int数组的所有可能组合   java JDBC classnotfound异常   httpclient中的java将HttpEntity转换为字符串的最优雅/正确的方法是什么?   如何从Java程序运行nano?   java在安卓中调用自定义类/方法   调用方法和JOptionPane后,允许代码继续执行所需的java计时器或其他想法   关于侦听器的向量Java并发问题   线程池执行器Java线程池   java配置DTO上的Swagger javax验证约束   Java中用于按钮功能的swing操作命令   ServletOutputStream中的java设置状态代码   java打印输入数组的平均值