Firestore 安全规则。用户可以知道人们的 UID 吗?

Posted

技术标签:

【中文标题】Firestore 安全规则。用户可以知道人们的 UID 吗?【英文标题】:Firestore Security Rules. Is it Okay for users to know peoples UID? 【发布时间】:2020-05-12 01:23:30 【问题描述】:

所以我现在有一个集合,结构如下

Companies (Collection) -> Company (Document) -> Document 包含包括身份验证 UID 在内的数据,以及一个名为employs 的子集合,如果有意义的话,该子集合具有单独的employee 文档。

我有两个问题。

    基本上,我希望任何经过身份验证的用户都能够读取数据,因此任何用户,如果他想可以读取公司 uid 和其他数据,包括子集合中的数据使用。但是对于写权限,我只希望公司能够编辑自己的文档及其雇员子集文档。因此,为了实现这一点,我使用了以下安全代码
match /databases/database/documents 

    match /companies/companyID 
        allow read: if request.auth.uid != null;
        allow create,update: if request.auth.uid == resource.data.uid && request.auth.uid == request.resource.data.uid 
        allow delete: if request.auth.uid == resource.data.uid
    
    match /companies/companyID/employs/employID
        allow read: if request.auth.uid != null
        allow write: if request.auth.uid == get(/databases/$(database)/documents/brands/$(document)).data.uid && request.auth.uid == request.resource.data.uid 

    

  

所以我的第一个问题是,其他用户是否可以读取其他用户的 UID,因为我不知道处理写权限的不同方法,因为我目前正在检查文档 ID 是否匹配request.auth.uid。在文档中,他们似乎也是这样做的。但我只需要确保用户 uid 可以“公开”。

其次,我的实施对吗?我还应该做些什么来达到预期的效果吗?请提供反馈或建议,谢谢!

【问题讨论】:

见***.com/questions/37221760/… 【参考方案1】:

如果您的安全规则设置正确,则 UID 是否已知通常无关紧要。但是,您必须自己评估。如果没有看到您在系统中使用它的所有方式,我们无法确定。

您必须这样考虑:如果任意用户知道另一个任意用户的 UID,那么可以知道其他人的什么信息? 如果可以在没有他们的情况下获取个人身份信息同意,您可能应该更正这一点。如果可以以任何方式更改用户的数据(同样,未经他们的同意),那么您也会遇到问题。

UID 本身不包含任何信息。这只是一个随机字符串。它不可能被传入请求“欺骗”。 request.auth.uid 始终是登录用户的正确 UID,而不是其他用户。

你的规则看起来不错,但我强烈建议testing them using the local emulator。您可以使用您编写的测试代码亲自验证它们是否完全符合您的预期。

【讨论】:

以上是关于Firestore 安全规则。用户可以知道人们的 UID 吗?的主要内容,如果未能解决你的问题,请参考以下文章

用于在用户之间共享数据的 Firestore 安全规则

包含数组的查询的 Firestore 安全规则

匿名身份验证用户的这个 Firebase/Firestore 安全规则是不是安全?

如何从 Firestore 导出安全和索引规则?

Firebase Firestore 安全规则共享数据

以下场景的正确 Firestore 安全规则是啥?