如何保护会话不被盗?

Nip*_*ips 5 django django-middleware

简单测试:

  1. 在一台机器上我登录到站点 (https)
  2. 我在不同机器上进入同一页面(未登录)
  3. 我在第二台机器上的标题中切换了 session_id - 从第一台机器
  4. 在第二台机器上,我获得了第一台机器的所有信息 - 我已登录,可以轻松浏览其数据等。

如何保护会话(可能还有 csrf 令牌)免遭盗窃?

Bas*_*sic 5

  • 确保您的会话密钥不可猜测。GUID/UUID 在这里工作正常(或者更好,散列加密随机数生成器的输出)。
  • 确保永远不会以纯文本形式传输 Id(使用 SSL)
  • 经常更新您的会话 ID(比如每 5 分钟左右)。

通过上述操作,攻击者应该不可能拦截会话 id。使用安全 Cookies也是一个好主意。这将防止为非安全资源发送 cookie(例如,通过不需要身份验证的 http 加载图像/css)

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

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

假设您正在与正确的服务器交谈 [另一个问题],攻击者获取您的会话 ID 的唯一方法是在您的机器上安装恶意软件或破坏 Ssl。

频繁更改 id 意味着攻击者在必须重新开始之前只有很短的时间。