关于在典型的单页应用程序(cookie与本地存储)中存储令牌的安全方式已写了很多文章,并且使用cookie通常被认为是更好的选择。 [1] [2] [3]
原因是将会话数据存储在本地存储中容易受到XSS攻击。 Cookies存在CSRF问题,但从文字来看,实施CSRF保护应该不是问题。
但是我无法想象SPA的REST API的CSRF保护不会受到XSS的攻击(除非我们谈论的是重新认证和验证码),甚至是CSRF Prevention Cheat Sheet中提到的OWASP:
...任何跨站点脚本漏洞都可以用来击败当今市场上所有可用的CSRF缓解技术(涉及用户交互的缓解技术除外...
因此,如果cookie没有XSS问题,但确实有CSRF问题,但是如果存在XSS,CSRF就没用了,为什么它们被认为是更好的选择?如果情况并非如此,那么不受XSS影响的CSRF保护将是什么?
答案 0 :(得分:1)
说将auth令牌存储在httpOnly cookie中对xss是“免疫的”,这仅意味着不能通过xss访问该令牌本身。绝不意味着该应用程序可能不会受到攻击。
如果应用程序容易受到XSS的攻击(它仍然可以成为OFC),则可以在客户端上访问任何内容,包括csrf令牌或客户端中显示或处理的任何数据。只有httpOnly cookie中的登录/身份验证令牌不可访问,这意味着攻击者至少不能窃取该会话。但这远不是从xss安全的。