Django 如何防止会话被盗?

Django 如何防止会话被盗?,django,django-middleware,Django,Django Middleware,简单测试: 在一台计算机上,我登录到站点(https) 我在不同的机器上输入了相同的页面(未登录) 我切换了第二台机器上标题中的会话\u id-来自第一台机器 在第二台机器上,我得到了第一台机器的所有信息——我已登录,可以轻松浏览其数据,等等 如何防止会话(可能还有csrf令牌)被盗? 确保会话密钥不可用。GUID/UUID在这里工作正常(或者更好,散列加密随机数生成器的输出) 确保从未以纯文本形式传输Id(使用SSL) 经常更新会话Id(比如每5分钟左右一次) 通过执行上述操作,攻击者不可能

简单测试:

  • 在一台计算机上,我登录到站点(https)
  • 我在不同的机器上输入了相同的页面(未登录)
  • 我切换了第二台机器上标题中的会话\u id-来自第一台机器
  • 在第二台机器上,我得到了第一台机器的所有信息——我已登录,可以轻松浏览其数据,等等
  • 如何防止会话(可能还有csrf令牌)被盗?

    • 确保会话密钥不可用。GUID/UUID在这里工作正常(或者更好,散列加密随机数生成器的输出)
    • 确保从未以纯文本形式传输Id(使用SSL)
    • 经常更新会话Id(比如每5分钟左右一次)
    通过执行上述操作,攻击者不可能截获会话id。这也是一个好主意。这将防止为非安全资源发送cookie(例如通过http加载图像/css,不需要身份验证)

    您可以选择尝试将会话绑定到IP地址,但这不是一个完美的解决方案。它无法抵御与用户位于同一NAT后面的攻击者,并且无法对具有多条internet路由的有效用户进行身份验证

    澄清一下:您将始终能够看到自己的会话id。诀窍是确保没有其他人可以看到它。这实际上是一个临时密码。大多数浏览器在磁盘上对安全cookie进行加密(可逆)。它再次加密,以便通过SSL传输到服务器

    假设您与正确的服务器[a]对话,攻击者获取会话id的唯一方法是在您的计算机上安装恶意软件或破坏Ssl


    频繁更改id意味着攻击者只有很短的时间才能重新开始。

    保护cookie和签名会话不起作用-我替换密钥会话id并拥有一切。除了在securec Cookie和签名会话中,我不知道如何在注销时删除旧用户会话,因为标准方法不起作用。它们以什么方式“不起作用”?关键是要防止攻击者获取会话id。如果您同时使用它们,则拦截会话id的唯一方法是断开SSL。作为cookie的所有者,您可以看到该值这一事实与此无关,除非您要将其发送给其他人(不要)。关于删除Django中的旧会话,请参阅、clear_expired以及同一页面上的示例,了解如何执行显式注销。@Nips我已经添加了一些说明。这有帮助吗?