首页 > 解决方案 > 页面正文中的会话令牌

问题描述

场景: 当使用像 Varnish 这样的缓存时,可以使用 JS 更新页面数据,以便用户特定的数据可用。这需要 AJAX 请求发送一个身份验证令牌,该令牌在登录时提供给 JS 应用程序,并存储在浏览器的会话存储中。在非清漆网站上,会话 cookie 和 xsrf 令牌可用于每个请求,但这些在清漆缓存页面上不可用,因此需要在登录时检索它并在会话期间将其存储在某个地方。JS 无法访问加密后的 cookie 的内容,因此需要在登录响应的 header 或 body 中传递 session 身份验证令牌,以便 JS 可以抓取它,存储它,并在后续请求时返回它。整个循环发生在 https 上。

问题:

  1. 用户会话现在是否比在非 Varnish 环境中使用标准会话 cookie 更容易受到攻击?
  2. 使用会话存储来存储令牌是一个漏洞吗?
  3. 有更好的解决方案吗?

标签: securityreverse-proxybearer-token

解决方案


简而言之,您的设置很棒。

用户会话现在是否比在非 Varnish 环境中使用标准会话 cookie 更容易受到攻击?

不,您的实现比标准会话 cookie 更好。因为不建议将会话数据存储在 cookie 中,因为它会在每个请求中发送 cookie,即使请求请求来自不同的来源。这可能会导致 XSRF 漏洞。为了减轻这种情况,您应该添加xsrf token到您的每个请求中。但如果您也设置xsrf token为 cookie,则可能存在 XSRF 漏洞。

最好将 Session 数据和 XSRF 令牌存储在会话存储或本地存储中(取决于用例)。

使用会话存储来存储令牌是一个漏洞吗?

不,只要您不将令牌存储在 cookie 中,那么您应该一切顺利。

有更好的解决方案吗?

这取决于用例。对于您提供的场景,这是完美的。如果您在请求正文中发送会话令牌会更好。就像 Oauth 如何实现它一样。
对于身份验证,您可以使用会话令牌和 xsrf 令牌将响应作为 JSON 数据返回以供进一步使用。


推荐阅读