Firebase 安全规则混乱

Posted

技术标签:

【中文标题】Firebase 安全规则混乱【英文标题】:Firebase security rules confusion 【发布时间】:2020-07-09 02:35:04 【问题描述】:

我有一个使用 pdf 文件和视频文件的颤振应用程序。我已将这些文件放在 firebase 存储中,并将这些文件的 url 放在数据库集合中,以便在我的应用程序中使用它们。 我不想在我的应用程序上进行任何电子邮件和密码身份验证。我的 pdf 和视频文件安全吗? 任何人都可以访问或获取它们吗? 这是我的数据库规则:

rules_version = '2';
service cloud.firestore 
  match /databases/database/documents 
    match /document=** 
      allow read, write;
    
  

这是我的 Firebase 存储规则:

service firebase.storage 
  match /b/bucket/o 
    match /allPaths=** 
      allow read, write;
    
  

【问题讨论】:

嗯.. 我认为他构建应用程序是为了自己使用,对吧? 【参考方案1】:

您的规则允许任何人读取、修改或删除您的文件,因此,您的文件根本不安全。 如果您希望您的文件安全,您必须考虑实施某种身份验证并设置适当的规则,以便只有您或某些用户组能够访问您的文件。

你可以在Firebase documentation阅读更多关于设置规则的内容。

【讨论】:

【参考方案2】:

如果您不想要求用户输入凭据,但仍需要一点安全性,请考虑使用 Firebase 的 anonymous authentication 提供程序。来自文档:

您可以使用 Firebase 身份验证来创建和使用临时匿名帐户来通过 Firebase 进行身份验证。这些临时匿名帐户可用于允许尚未注册您的应用的用户使用受安全规则保护的数据。如果匿名用户决定注册您的应用,您可以link their sign-in credentials to the anonymous account,以便他们可以在以后的会话中继续使用其受保护的数据。


当然,如果您不想将您的文件或数据与特定用户相关联,那么匿名身份验证也毫无意义。但此时您确实希望允许纯粹的未经身份验证的公共访问。这也可能是一个不错的选择,只要您意识到您的项目将对任何用户的任何读取/写入收费。


如果您希望任何用户在不识别他们或提供凭据的情况下能够读取数据/文件,但不写入他们自己的任何数据/文件,您正在寻找只读规则:

allow read; if true;
allow write: if false;

或者更短,但阅读起来不太明确:

allow read

【讨论】:

如果我不在我的应用程序代码中为他们提供选项,人们将如何编写他们自己的数据/文件?这让我感到困惑。而这一点“只要您意识到您的项目将对任何用户的任何读/写收费。”你这是什么意思?为什么授权读取不收费? 借助 Firebase,用于访问您的文件和数据的配置数据直接嵌入到应用程序中。恶意用户可以获取该配置数据,然后自己调用 Firebase API 来执行您的代码无法执行的操作。这就是为什么您需要(也)通过安全规则或服务器端代码在服务器上强制执行您的业务规则。 好的,如果我只读了,那么恶意用户可以调用 API 并只读取所有数据而没有其他内容?如果我包含一个注册位,他们仍然可以这样做,但恶意用户注册会更加努力吗? 如果您希望所有用户都能够读取所有数据,那么是的,这只是一步之遥。不过,这个额外的步骤很重要,尤其是对于访问 REST API 的愚蠢爬虫。但是,如果您的应用程序需要全世界的每个人都能够读取数据库中的所有内容(正如我在回答中所说),这也可能没问题,只要您意识到您的项目将对任何用户的任何读/写收费。

以上是关于Firebase 安全规则混乱的主要内容,如果未能解决你的问题,请参考以下文章

读取 Firebase 存储映像安全规则

所有存储桶的 Firebase 存储安全规则

如何根据用户配置文件配置 Firebase 安全规则?

如何使用命令行部署 Firebase 数据库安全规则?

每个文档颤动的 Firebase-firestore 安全规则

为啥我的 Firebase 安全规则没有按预期工作?