security - 页面正文中的会话令牌
问题描述
场景: 当使用像 Varnish 这样的缓存时,可以使用 JS 更新页面数据,以便用户特定的数据可用。这需要 AJAX 请求发送一个身份验证令牌,该令牌在登录时提供给 JS 应用程序,并存储在浏览器的会话存储中。在非清漆网站上,会话 cookie 和 xsrf 令牌可用于每个请求,但这些在清漆缓存页面上不可用,因此需要在登录时检索它并在会话期间将其存储在某个地方。JS 无法访问加密后的 cookie 的内容,因此需要在登录响应的 header 或 body 中传递 session 身份验证令牌,以便 JS 可以抓取它,存储它,并在后续请求时返回它。整个循环发生在 https 上。
问题:
- 用户会话现在是否比在非 Varnish 环境中使用标准会话 cookie 更容易受到攻击?
- 使用会话存储来存储令牌是一个漏洞吗?
- 有更好的解决方案吗?
解决方案
简而言之,您的设置很棒。
用户会话现在是否比在非 Varnish 环境中使用标准会话 cookie 更容易受到攻击?
不,您的实现比标准会话 cookie 更好。因为不建议将会话数据存储在 cookie 中,因为它会在每个请求中发送 cookie,即使请求请求来自不同的来源。这可能会导致 XSRF 漏洞。为了减轻这种情况,您应该添加xsrf token
到您的每个请求中。但如果您也设置xsrf token
为 cookie,则可能存在 XSRF 漏洞。
最好将 Session 数据和 XSRF 令牌存储在会话存储或本地存储中(取决于用例)。
使用会话存储来存储令牌是一个漏洞吗?
不,只要您不将令牌存储在 cookie 中,那么您应该一切顺利。
有更好的解决方案吗?
这取决于用例。对于您提供的场景,这是完美的。如果您在请求正文中发送会话令牌会更好。就像 Oauth 如何实现它一样。
对于身份验证,您可以使用会话令牌和 xsrf 令牌将响应作为 JSON 数据返回以供进一步使用。
推荐阅读
- c# - 通过使用 Microsoft Bot Framework 将 Cortana 作为通道添加到我的机器人而出现错误
- swift - Swift Playgrounds:使用未解析的标识符“模型”
- python - 多文件上传 DRF
- node.js - 无法使用 Chrome DevTools 调试 node.js
- java - 在java中将JSON转换为PDF的最简单方法?
- matplotlib - 是否可以在 Matplotlib 的表面上绘图?
- php - 将 opencart 网站移动到新域/服务器的问题
- arduino - 使用在 void receiveEvent 中获取的变量时出现问题,在 void 循环内
- java - Decorating ClassLoader methods using ByteBuddy
- scala - 是否存在或将存在扩展 Seq 的 Scala 集合,其迭代速度比 Array 更快?