场景:当使用像Varnish这样的缓存时,JS可用于更新页面数据,以便用户特定的数据可用。这要求 AJAX 请求发送身份验证令牌,该令牌在登录时提供给 JS 应用程序,并存储在浏览器的会话存储中。在非清漆网站上,会话 cookie 和 xsrf 令牌可用于每个请求,但这些在清漆缓存页面上不可用,因此需要在登录时检索它并在会话期间将其存储在某个地方。JS无法访问加密cookie的内容,因此需要在登录响应的标头或正文中传递会话认证令牌,以便JS可以抓取它,存储它,并在后续请求时返回它。整个周期通过https发生。
问题:
- 用户会话现在是否比使用标准会话更容易受到攻击 非清漆环境中的会话 cookie?
- 使用会话存储来存储令牌是否为漏洞?
- 有没有更好的 溶液?
简而言之,您的设置很棒。
用户会话现在是否比在非清漆环境中使用标准会话 cookie 更容易受到攻击?
不,您的实现比标准会话 cookie 更好。 因为不建议将会话数据存储在 cookie 中,因为即使请求请求来自不同的来源,它也会在每个请求中发送 cookie。 这可能导致 XSRF 漏洞。要缓解此问题,您应该向每个请求添加xsrf token
。但是,如果您xsrf token
也设置为 cookie,则可能存在 XSRF 漏洞。
最好将会话数据和 XSRF 令牌存储在会话存储或本地存储中(取决于用例(。
使用会话存储来存储令牌是否为漏洞?
不,只要您不将令牌存储在cookie中,那么您应该很高兴。
有没有更好的解决方案?
这取决于用例。 对于您提供的场景,这是完美的。 如果您在请求正文中发送会话令牌会更好。 就像 Oauth 如何实现它一样。
对于身份验证,您可以将响应作为 JSON 数据返回,其中包含会话令牌和 XSRF 令牌以供进一步使用。