热门网站如何获得安全的身份验证流程?

时间:2020-04-21 12:18:23

标签: authentication jwt session-cookies xss csrf

我正在创建一个带有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的攻击?

  • 这是否意味着amazon.com容易受到XSS或CSRF的攻击?

我不明白。

我认为这些网站在身份验证方面是安全的,尽管它们都不都使用2要素身份验证或OAuth,也不要求用户在每次页面刷新时再次登录。

那么,为什么所有人都告诉所有人,如果所有这些网站都是安全的,那么有两种解决方案(一种容易受到XSS攻击,另一种容易受到CSRF攻击)?他们如何保护身份验证,为什么我们不能这样做?

1 个答案:

答案 0 :(得分:0)

没有“一刀切”的解决方案,这实际上取决于您的情况。例如,您的 XSS 保护有多有效可能取决于您对 CDN 的依赖程度。如果您想尽可能安全,您需要了解您的情况和潜在解决方案的缺点,以确定您是否可以对架构进行更改以支持解决方案。

我建议一个简单的通用实现,将 JWT 存储在 httpOnly Cookie 中,以便恶意 javascript 无法访问它,并将 CSRF 令牌存储在 localStorage 中,以便 CSRF 攻击者无法访问它。