【问题标题】:Firebase rule query.equalTo always returns "Permission denied" on RESTFirebase 规则 query.equalTo 始终在 REST 上返回“权限被拒绝”
【发布时间】:2018-07-02 21:31:01
【问题描述】:

我正在尝试确保我的数据库安全,我的场景数据如下所示:

receipts: [
  {
    userId: id,
    ...
  },
  {
    userId: id,
    ...
  },
...
]

每张收据都有userId 字段,其中包含有关其创建者的信息。我想返回特定用户的收据列表。为此,我进行了如下所示的 REST 调用:

https://[PROJ_NAME].firebaseio.com/receipts.json?orderBy="userId"&equalTo="[USER_ID]"&auth=[TOKEN]

并且在所有设置为打开的规则上,它都非常有效。但我想保护我的数据库,这样其他用户就无法通过更改 URL 来查看所有资源。

在 firebase 文档中,我发现了这样的 sn-p:

"baskets": {
  ".read": "auth.uid != null &&
            query.orderByChild == 'owner' &&
            query.equalTo == auth.uid" // restrict basket access to owner of basket
}

这似乎是合理的,所以我将它应用到我的配置中,但现在它总是失败。这是我的文件的样子:

{
  "rules": {
      "receipts": {
        ".indexOn": ["userId"],
        ".read": "auth.uid != null &&
                  query.orderByChild == 'userId' &&
                  query.equalTo == auth.uid"
    }
  }
}

不幸的是,它总是返回"error" : "Permission denied"。因为那件事我已经失去了一整天:(

谁能帮帮我?

【问题讨论】:

  • 您是否尝试过引用equalTo 的值?例如equalTo="[USERID]"
  • 是的,引用和orderBy="userId"一样。
  • 我在security rules documentation 中没有找到关于query 变量的任何内容。我认为您的规则中使用 query 的条款无效。您能否发布指向您发现在规则中使用query 的文档或示例的链接?
  • @BobSnyder:firebase.google.com/docs/database/security/…我什至不知道这已经发布了,所以需要一点时间来赶上......并可能更新几百个问题来解释“规则现在可以用于过滤数据,如果您确保查询和规则一致”。
  • 根据我使用 Android SDK 完成的测试,我同意 equalTo 似乎已损坏。

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


【解决方案1】:

firebaser 在这里

更新 (2018-01-25):此错误现已修复。由于这是服务器端问题,因此无需更新您的 SDK。

.


原答案如下


目前服务器解释使用query.orderByChildquery.equalTo 的安全规则的方式存在错误。我们正在努力解决问题。

要暂时解决此问题,您可以将query.startAtquery.endAt 组合使用以获得相同的结果:

    ".read": "auth.uid != null &&
              query.orderByChild == 'userId' &&
              query.startAt == auth.uid &&
              query.endAt == auth.uid"

【讨论】:

  • 太棒了!此解决方法按预期工作。我什至不必更改我的查询。以上规则适用于查询 URL 中的equalTo
  • 是的,我注意到它适用于相同的查询。我立即尝试查看那里是否存在漏洞。 :-) 如果你找到了,请告诉我!或者,如果您当然发现更多问题。
  • 这总是为我返回 null,即使我有相同 uid 的数据
  • @FrankvanPuffelen 我想我看到类似的权限被拒绝bug with the startAt rule in this question
猜你喜欢
  • 2019-12-26
  • 2020-08-16
  • 1970-01-01
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多