Swift Firebase/Firestore-数据库具有不安全的规则?

Swift Firebase/Firestore-数据库具有不安全的规则?,swift,firebase,google-cloud-firestore,firebase-security,database-security,Swift,Firebase,Google Cloud Firestore,Firebase Security,Database Security,我有一个SwiftUI应用程序,它使用Firebase作为后端,我的规则如下: rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { // This rule allows anyone on the internet to view, edit, and delete // all data in your Firestore database. It i

我有一个SwiftUI应用程序,它使用Firebase作为后端,我的规则如下:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // This rule allows anyone on the internet to view, edit, and delete
    // all data in your Firestore database. It is useful for getting
    // started, but it is configured to expire after 30 days because it
    // leaves your app open to attackers. At that time, all client
    // requests to your Firestore database will be denied.
    //
    // Make sure to write security rules for your app before that time, or else
    // your app will lose access to your Firestore database
    match /{document=**} {
      allow read, write: if request.time < timestamp.date(2020, 10, 28);
    }
  }
}
rules_version='2';
服务云.firestore{
匹配/databases/{database}/documents{
//此规则允许internet上的任何人查看、编辑和删除
//Firestore数据库中的所有数据。这对于获取
//已启动,但已配置为在30天后过期,因为
//使您的应用对攻击者开放。此时,所有客户端
//对Firestore数据库的请求将被拒绝。
//
//确保在此之前为你的应用编写安全规则,否则
//你的应用程序将无法访问你的Firestore数据库
匹配/{document=**}{
允许读写:if request.time
我知道这些规则允许任何人读写数据库。然而,只要他们只使用应用程序中提供给他们的API,这怎么会不安全呢?例如,如果有人从我的笔记本电脑上拿走了xcode项目,并创建了一个删除数据库中所有用户的按钮,我可以理解这种危险。但是,没有人可以访问此代码

我确实希望用户能够读写数据库,所以我只是想知道这些规则是否不安全,如果是,为什么?例如,有恶意意图的黑客如何利用这些规则获得对用户信息的未经授权访问和/或以我的应用程序中提供的API不允许的方式修改数据库

多谢各位

只要他们只使用应用程序中提供给他们的API

这正是问题所在

您的应用程序包含连接到数据库(以及Firebase项目中的其他资源)所需的所有配置。恶意用户可以获取此配置数据,并自行调用API,从而绕过任何客户端逻辑

目前无法确保对数据库的访问来自您的代码,而不是其他人的代码和您的配置数据


这就是为什么在安全规则中对业务逻辑进行编码是至关重要的。假设您的应用程序代码只允许用户从数据库中删除自己的帐户,那么您还需要在安全规则中对该逻辑进行编码,以便在服务器上强制执行。这是Firebase文档中关于保护数据库的描述的变体。

好的,谢谢你的回答,我将实施与Firebase文档中描述的规则类似的规则<代码>恶意用户可以获取此配置数据,并自己调用API-从而绕过任何客户端逻辑。
他们如何做到这一点?比如,他们如何能够自己访问API,而不必像在应用商店中一样通过应用程序?也许这是我不应该担心的事情,我应该知道这是可能的。他们(或他们认识的人)当然需要你的应用程序来获取密钥。但是他们可以从中提取配置数据。而且,由于你的应用程序需要同样的数据才能合法访问该项目,因此无法阻止恶意用户获取该数据。因此:服务器端安全规则是目前解决此问题的唯一方法。您好,谢谢您的回答。因此,为了确保这一点,您会这样做:
match{document=**}{allow read,write:if request.auth!=null;}
防止恶意用户访问数据库。不,不会,因为任何人都可以从您的应用程序获取配置数据并调用API登录。请仔细研究我链接的文档,因为它比我在这里做得更好,并且有一个更安全(和更复杂)的用例示例。好的,非常感谢,我将更彻底地阅读它,感谢您的见解。