【问题标题】:Firebase Security Rules: Is checking database value equally secure with checking auth?Firebase 安全规则:检查数据库值与检查身份验证是否同样安全?
【发布时间】:2021-10-22 23:33:09
【问题描述】:

我想知道为用户检查“数据库值”(下面的示例)是否与“检查身份验证”(下面的示例)一样安全、更高或更低。

检查“数据库值”对于应用程序来说是否足够安全?

检查数据库值:

"root.child('account').child($uid).child('role').val() === 'admin'"

检查身份验证:

"auth != null"

【问题讨论】:

    标签: firebase firebase-realtime-database firebase-authentication firebase-security


    【解决方案1】:

    如果只有您或任何授权用户可以在数据库中编辑该角色,那么使用安全规则是安全的。我建议在数据库中存储一个单独的 admins 节点并检查该节点中的用户 UID,以便更轻松地编写安全规则来保护它。

    admins
      |-user1: true
      |-user2: true
    

    然后你可以编写以下规则来检查用户是否是管理员:

    root.child('admins').child(auth.uid).val() === true
    

    如前所述,确保只有授权用户才能向该节点添加新管理员。

    但是,请注意实时数据库中的数据只能在实时数据库的安全规则中访问。如果您以后需要使用 Firestore 或 Storage,您将无法在其安全规则中检查管理员。在这种情况下,使用Custom Claims 可能是更好的方法。


    如果您需要检查请求数据的用户是否是管理员,您应该使用auth.uid 而不是$uid$uid 是一个通配符,将在被访问的路径中占用匹配值。使用$uid 本身听起来并不安全,就像我尝试向/path/($uid=someId) 发出请求一样,您的规则将在管理节点中检查someId,以便用户可以尝试传递多个不安全的ID。

    【讨论】:

      猜你喜欢
      • 2016-03-06
      • 1970-01-01
      • 2019-01-20
      • 2020-10-18
      • 2019-06-15
      • 2020-06-23
      • 2021-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多