我正在创建一个带有react.js前端和node.js REST API后端的应用程序。
在搜索如何处理身份验证机制时,使用JWT VS会话ID并将其存储在本地存储VS cookie中的答案总是相同的,并带有以下警告:
Local storage is vulnerable to XSS, don't do it
Cookies are vulnerable to CSRF, even if they are httponly and secure, don't do it
Double Submit Cookies method is vulnerable to XSS
基本上,无论选择哪种解决方案,我们都将始终容易受到XSS或CSRF的攻击。</ p>
我不明白。现在是2020年,似乎不存在安全的身份验证机制?但是,
这是否意味着stackoverflow.com容易受到XSS或CSRF的攻击?
这是否意味着facebook.com容易受到XSS或CSRF的攻击?
这是否意味着twitter.com容易受到XSS或CSRF的攻击?
这是否意味着google.com容易受到XSS或CSRF的攻击?
我不明白。
我认为这些网站在身份验证方面是安全的,尽管它们都不都使用2要素身份验证或OAuth,也不要求用户在每次页面刷新时再次登录。
那么,为什么所有人都告诉所有人,如果所有这些网站都是安全的,那么有两种解决方案(一种容易受到XSS攻击,另一种容易受到CSRF攻击)?他们如何保护身份验证,为什么我们不能这样做?
答案 0 :(得分:0)
没有“一刀切”的解决方案,这实际上取决于您的情况。例如,您的 XSS 保护有多有效可能取决于您对 CDN 的依赖程度。如果您想尽可能安全,您需要了解您的情况和潜在解决方案的缺点,以确定您是否可以对架构进行更改以支持解决方案。
我建议一个简单的通用实现,将 JWT 存储在 httpOnly Cookie 中,以便恶意 javascript 无法访问它,并将 CSRF 令牌存储在 localStorage 中,以便 CSRF 攻击者无法访问它。>