安全性-如果没有XSS防护,CSRF防护就没用了吗?

问题描述 投票:1回答:1

我正在使用带有Sapper的Svelte.js在AWS上开发无服务器应用程序和静态前端。对于用户管理,我使用的是AWS Cognito用户池。 Cognito在执行身份验证操作时会返回JWT令牌,因此自然会导致在客户端将这些令牌存储在何处的问题。

我已经阅读了使用localStorage和cookie的各种优缺点,以及第一个选项如何针对XSS漏洞打开一个选项,而第二个选项则容易受到CSRF的攻击。我了解到,可以通过恶意脚本轻松访问localStorage,并且在其中存储诸如JWT之类的敏感信息是有风险的。我也了解使用HttpOnly可以防止javascript访问cookie,因此为什么它们应该更能抵抗XSS攻击。

但是在阅读OWASP guide to CSRF prevention时,我遇到了这个有趣的陈述:

但是,任何跨站点脚本漏洞都可以用来击败当今市场上所有可用的CSRF缓解技术(涉及用户交互的缓解技术除外,并且在本要点中稍后介绍)...绝对没有XSS漏洞是必须的。为了确保CSRF防御措施不受规避而存在。

但是,同一指南中还有另一条陈述指出:

请注意,令牌本身可以缓解CSRF

这让我非常困惑。哪有用户交互之外的所有CSRF预防技术是否容易受到攻击,或者基于令牌的技术是否可以接受?

并且,如果它们无效,并且由于CSRF预防依赖于XSS预防,这是否意味着将JWT存储在cookie中提供的安全性仅比将它们存储在localStorage中提供的安全性高甚至没有?如果我的应用程序中存在XSS漏洞,这是否意味着我设置的任何CSRF防御措施实际上都没有用?

如果是这种情况,那么当我本来需要防止XSS时为什么要在处理cookie和CSRF预防方面遇到麻烦?

有人可以帮忙阐明一下这个问题吗?有没有一种方法可以正确使用不会向XSS攻击的JWT?基于令牌的技术(例如同步器模式或加密模式)真的有效吗?

谢谢。

我正在使用带有Sapper的Svelte.js在AWS上开发无服务器应用程序和静态前端。对于用户管理,我使用的是AWS Cognito用户池。执行身份验证时,Cognito返回JWT令牌...

security jwt xss csrf amazon-cognito
1个回答
0
投票

我还试图了解Sapper应用程序的最佳安全做法。我在这里找到了一些有关使用标题的内容:https://github.com/sveltejs/sapper/issues/880

© www.soinside.com 2019 - 2024. All rights reserved.