【问题标题】:In Firebase Firestore, is there any way to pass info to the Security Rules which is not part of the path?在 Firebase Firestore 中,有没有办法将信息传递给不属于路径的安全规则?
【发布时间】:2018-03-05 15:50:55
【问题描述】:

我想向 Firestore 数据库 (Firebase) 发送一些信息,最好以键值对的形式(但不一定),以便它可以使用它来评估其规则中的访问权限(读取和写入时)。

但是,我不希望此信息成为路径的一部分。

例如,假设我有一些passParameters 方法:

DocumentReference docRef = 
      db.collection("cities")
        .document("SF")
        .passParameters("abc", 123);

然后我可以在编写规则时访问此信息,如下所示:

service cloud.firestore {
  match /databases/{database}/documents/cities/SF/ {
    allow read, write: if request.parameters.abc == 123;
  }
}

请注意,以上只是一个例子。现实生活中的用例更为复杂。换句话说,不要过多关注示例本身,而是回答更通用的问题:有没有办法将信息传递给不属于路径的安全规则?

【问题讨论】:

  • 您最终找到解决方案了吗?我正在尝试实现类似的东西,但我的用户不需要经过身份验证。安全性对于这个用例也不重要
  • @MichaelB Firestore 规则仅对安全性很重要。他们不过滤结果。他们只能拒绝访问。
  • 我并没有尝试过滤结果,只需要一个参数,我可以通过编程方式附加到对 firebase 的请求,而无需对用户进行身份验证——因此不能在身份验证令牌中使用自定义 clains。

标签: firebase google-cloud-firestore firebase-security


【解决方案1】:

您可以使用自定义令牌发送此类参数。将这些值作为声明包含在自定义令牌中,并在向 Firestore(或登录)发送请求时在您的客户端中使用该令牌。

This link 解释了如何- 1) 创建自定义令牌,2) 在这些令牌中包含自定义声明,以及 3) 在安全规则中访问这些声明。

您可以使用云功能来为特定用户生成带有自定义声明的自定义令牌。

如果您要作为参数传递给 firebase 的信息经常更改,那么每次您想更改参数值时,这将是一个云函数调用正在通过 - 所以有点贵。但是,如果参数的更改频率较低(例如用户拥有的某些角色或特殊权限),那么此解决方案应该可以完美运行,这是自定义令牌的主要好处之一。

尽管它不像您的示例期望 sn-p 那样简单,但我仍然相信这是实现您想要的一种方法。

【讨论】:

  • 它可能对某些用例有用。但 request.auth.token 仅适用于 Firebase 身份验证?使用 IAM 的管理服务器怎么样?
  • Admin SDK 不通过 firebase 规则,它们总是绕过它。
【解决方案2】:

不支持。如果客户端可以通过查询指定它想要的任何安全参数,这将不是一个非常“安全”的安全规则。这实际上与允许客户端传递明文密码以使某人可以访问某些内容没有什么不同。我希望攻击者能够发现这类信息。

【讨论】:

  • 这并不意味着安全,而是作为性能提示。举个简单的例子,假设我有一个包含 100000 个用户的有序列表,允许他们获取一些资源。我有一些安全规则,它读取某个用户的 request.auth.uid 并检查所有 100000 个用户以查看他是否在该列表中。如果客户端知道它在该列表中的位置,他可以将其索引作为提示传递给安全列表引擎。
  • 另一个例子:假设有 5 个资源可以被检查以授予某些特定用户的访问权限,其中任何一个都足够了。这迫使安全引擎获取所有 5 种资源(这将花费时间和金钱)。如果客户知道哪个资源包含授权所需的信息,他可以在一个参数中指出安全引擎应该检查哪个资源。
  • 另一个例子:假设 Cloud Functions 处理了一些请求,并且需要更多信息才能工作(一些不安全的信息),那么函数可以从请求中读取这些参数。
  • 如果需要在后端实现由参数驱动的逻辑,只需使用 Cloud Functions HTTP 触发器即可。
  • 与传递 Authorization 标头或 Cookie 标头或任何密钥/令牌相同。如果客户端从可靠的源(后端)服务器获取它,那么它将是一种安全机制
猜你喜欢
  • 2023-04-09
  • 2018-11-15
  • 1970-01-01
  • 2014-12-17
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
相关资源
最近更新 更多