代码之家  ›  专栏  ›  技术社区  ›  RJB

使用规则保护Firestore数据库。检查身份验证。够了吗?

  •  0
  • RJB  · 技术社区  · 5 年前

    我有一个数据库,基本上需要所有的用户阅读,也写。所有用户都可以看到数据库中的文档,并通过某些操作更改某些字段。在某些情况下,他们会删除某些过期的旧文件。

    我知道这能起作用:

    service cloud.firestore {
      match /databases/{database}/documents {
        match /{document=**} {
          allow read, write: if request.auth.uid != null;
        }
      }
    }
    

    现在,我的问题是,这够了吗?我不是黑客,所以我不知道黑客会或可能会如何破解和删除/更改我数据库中的内容,但这是否意味着只能通过使用应用程序对数据库进行更改?如果有人不使用该应用程序,并且以其他非法方式进行身份验证,是否仍有人会入侵该应用程序。

    1 回复  |  直到 5 年前
        1
  •  3
  •   Doug Stevenson    5 年前

    Firebase安全规则不能限制对单个应用程序的访问。 https://firebase.google.com/docs/reference/rest/auth

    Firebase身份验证的目的是确保个人用户的个人访问权限得到适当的控制。一旦您允许用户使用匿名或电子邮件身份验证创建帐户,他们就可以使用这些规则完全访问数据库中的所有文档。所以,你现在所拥有的并不是这个词的大多数定义所说的“安全”。你将不得不决定这是否是“安全”足够你的目的。

    你也可能会收到一封来自Firebase的邮件,说你的规则不安全。这不是个好主意 /{document=**} 像这样,匹配所有文档,这可能不是您想要的。至少,应该调用希望用户访问的各个集合,而不是使用此全局通配符。

        2
  •  2
  •   Renaud Tarnec    5 年前

    这是否意味着只能通过

    任何能得到你的 Firebase config elements 可以使用JavaScript SDK编写一个简单的HTML页面,并尝试与Firestore后端交互。请注意,获取Firebase配置元素并不困难,有关更多详细信息,请参阅底部。

    现在,重要的是要注意以下关于Firebase身份验证和注册用户的要点:

    您应该注意,任何人都可以通过调用 createUserWithEmailAndPassword() 方法或首次使用联合身份提供程序登录用户,如 Google Sign-In Facebook Login (当然,如果这些身份提供者被激活)。看到了吗 doc .

    因此,同样地,使用Firebase配置元素,有人可以轻松地构建一个HTML页面来调用 方法。

    这意味着如果你想通过使用 allow read, write: if request.auth.uid != null 这是不够的

    Custom Claims . 例如,可以将特定声明设置为所有授权用户(例如authorized=true),并调整安全规则以检查用户令牌中是否存在此声明。


    注意:如何找到web应用程序的Firebase配置元素?

    找到Firebase配置对象并不困难。只需查看组成应用程序的所有HTML或JS文件即可 apiKey