使用 Firebase 电子邮件/密码身份验证的 CSRF 保护

Posted

技术标签:

【中文标题】使用 Firebase 电子邮件/密码身份验证的 CSRF 保护【英文标题】:CSRF Protection with Firebase Email/Password Authentication 【发布时间】:2018-07-08 09:40:25 【问题描述】:

我正在将我的 Node.js 应用程序部署到生产环境中。我们遇到了一些 CSRF 问题,但在深入研究了问题并了解了更多有关 CSRF 攻击的信息后,我想知道我们是否甚至需要执行这些检查。

我们的 API 已从我们的 CSRF 检查中列入白名单,因此依赖 API 的移动应用程序可以正常运行(我们目前正在努力保护它)。在网络前端,我们允许我们的用户注册/登录并创建/编辑他们的数据。我们使用 Firebase 的电子邮件/密码身份验证系统来执行身份验证 (https://firebase.google.com/docs/auth/web/password-auth)。据我了解,这意味着我们不必担心注册和登录时的 CSRF 攻击,因为 Firebase 会处理这些。我的问题是:如果我们确保我们的用户在我们的应用程序中的每个 Post 路由上都通过 Firebase 进行了身份验证,这是否意味着我们不必担心 CSRF 攻击?

【问题讨论】:

【参考方案1】:

当您保存会话 cookie 时,CSRF 会成为一个问题。 Firebase 身份验证当前将身份验证状态保留在网络存储 (localStorage/indexedDB) 中,并且不会随请求一起传输。您应该运行客户端代码来获取 Firebase ID 令牌并通过标头或 POST 正文等将其传递给请求。在您的后端,您将在提供受限内容或处理经过身份验证的请求之前验证 ID 令牌。这就是为什么在当前形式下,CSRF 不是问题,因为需要 javascript 从本地存储中获取 ID 令牌,而本地存储是单一主机来源,因此无法从不同来源访问。

如果您打算将 ID 令牌保存在 cookie 中或在 Firebase 身份验证后设置您自己的会话 cookie,那么您应该考虑防范 CSRF 攻击。

【讨论】:

太棒了,谢谢!这就说得通了。只是想确保我们没有误解任何事情 如果这回答了您的问题,请选择它,以便其他有类似问题的人可以从相同的答案中受益。谢谢。 另一方面,我们很容易受到 XSS 攻击,对吧? @alex067 XSS 是一个不同的问题,这个答案不会使您的网站更容易受到 XSS 攻击。如果您确实有 XSS 漏洞,但上面的答案影响较小,但这不是这里回答的问题。

以上是关于使用 Firebase 电子邮件/密码身份验证的 CSRF 保护的主要内容,如果未能解决你的问题,请参考以下文章

在不使用 Firebase 的情况下使用电子邮件和密码进行 Flutter 身份验证

设置最小密码长度 Firebase 电子邮件和密码身份验证

使用邮件和密码通过 REST API [Firebase] 进行身份验证

该电子邮件地址已被另一个帐户使用(使用电子邮件/密码 Firebase 进行身份验证)

使用 Firebase 电子邮件/密码身份验证的 CSRF 保护

如果用户已经无密码登录,firebase 可以设置密码身份验证吗?