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

标签 node.js security authentication firebase-authentication csrf

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

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

最佳答案

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

如果您计划在 Firebase 身份验证后将 ID token 保存在 cookie 中或设置您自己的 session cookie,那么您应该考虑防范 CSRF 攻击。

关于node.js - 使用 Firebase 电子邮件/密码身份验证的 CSRF 保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48505572/

相关文章:

angularjs - 使用 multer、ng-file-upload、Angular 和 Node 上传多个文件,并将动态表单数据绑定(bind)到每个文件

node.js - 测试除状态代码之外的响应 header 字段的困难

html - $window.location.href 在 AngularJS 中不工作

node.js - 检测提供商是否使用 Passport.js 注销?

javascript - node.js + socket.io : auction website development

node.js - Elasticsearch索引/缓存未清除/卡住

php - 使用带有 AJAX 请求的 CodeIgniter 保护 api

php - 仅从 Cron 运行 php 脚本或检查是否来自 cron 的请求?

php - 如何检查跨域请求是否被禁用

node.js - API授权策略