我有一个应用程序,我希望使用安全令牌实现对CSRF的保护,但如果他打开一个新标签,也可以让我的应用程序可用于同一个用户。
当用户使用正确的用户名/密码组合验证自己时,我将他添加到会话中并返回包含令牌的cookie。当cookie到达时,我从cookie中删除令牌并将其存储在全局变量中。对于每个请求,我都会附加令牌并将其与服务器上的令牌进行比较。
问题是当我打开一个新标签时,会自动从会话中删除用户,因为收到的请求不包含正确的标记。
我理解如果我将该令牌存储在cookie或localStorage中,我将能够从另一个选项卡中读取它并且该请求将是有效的,但我不确定这个实现的安全性甚至是哪一个更好?使用简单的XSS,您可以从cookie / localStorage / global变量中读取令牌...
我是否还有其他方法可以实施CSRF令牌保护,并且仍然可以从其他浏览器标签中使用我的应用程序?
答案 0 :(得分:2)
使用简单的XSS,您可以从cookie / localStorage / global变量中读取令牌...
如果您的网站容易受到XSS攻击,那么这始终会取代任何CSRF漏洞。
只要为每个新会话刷新CSRF令牌,就无需在使用后更改CSRF令牌。攻击者无法读取令牌,因此没有额外的风险。
这将使令牌能够跨标签工作而不会损失安全性。