【问题标题】:How to implement security correctly in firebase?I如何在 Firebase 中正确实施安全性?我
【发布时间】:2020-05-18 13:37:30
【问题描述】:

我正在努力了解 Firebase 中的安全性以及如何正确实施它

我有这个(默认)用于开发

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

文档说These rules give anyone, even people who are not users of your app, read and write access to your database

但是怎么做?我已经在我的应用程序中构建了私有路由(使用 react-router),因此除非用户登录,否则他们无法访问所有私有路由。任何包括提交/拉取数据的都在私有路由后面

所以我的问题是,为什么我需要使用数据库规则来保护数据?考虑到用户将无法添加/修改数据,除非他们登录。(他们只能在我的应用程序中使用谷歌登录)所以他们需要知道另一个用户谷歌密码才能访问我的应用程序。在这一点上,无论如何我都无法防御。显然每个用户都有一个 UID,但它在 firebase 的 auth DB 中是安全的,所以我很难看到这样做的好处是什么?

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}

甚至它是如何工作的?

【问题讨论】:

    标签: javascript firebase authentication


    【解决方案1】:

    如果所有内容的读/写都设置为 true,那么任何下载了 firebase npm 包并知道如何将几行 javascript 组合在一起的人都可以访问您的数据库。

    您可能编写了一个网站,该网站在运行访问数据库的代码之前要求登录,但其他人可以编写自己的网站或没有此检查的脚本。必须在服务器端强制执行安全性,这是使用 firebase 安全规则完成的。

    【讨论】:

    • 好的,谢谢,有道理。但不知道为什么当我实施发布的第二条规则时,我的应用程序没有检索数据?
    • 我不知道。您收到错误消息吗?试图检索数据的代码是什么?随时更新您的问题。
    • 我正在访问触发 lambda 的 api 网关。我的端点是:https://api-gate-way-id.amazonaws.com/data/get-data?userId=${action.id} 所以我在这个实例中传递了 ID。尽管我只是在网络选项卡中看到我的请求失败,但没有错误消息
    • 我只是想在我的 lambda 中这样阅读:let readData = firebaseApp.database().ref(users/${userID}/data)。我需要发送其他内容以允许用户阅读吗?
    猜你喜欢
    • 2022-08-12
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 2018-07-25
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多