电子邮件:[Firebase]客户端对Cloud Firestore数据库的访问权限将在X天后过期

jqjz2hbq  于 2023-03-31  发布在  其他
关注(0)|答案(7)|浏览(135)

我收到一封电子邮件,表明我正在“测试模式”下开发,但它使我的数据库完全开放给互联网。我最初接受的默认规则如下所示:

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(2019, 12, 14);
    }
  }
}

需要做些什么来满足这封电子邮件的要求?

stszievb

stszievb1#

这里显示的安全规则与以前的默认规则有所不同,这些规则更加宽松。此规则的想法是:

match /{document=**} {
  allow read, write: if request.time < timestamp.date(2019, 12, 14);
}

是你可以不受限制地访问你的Firestore数据库,直到给定的日期,为了自由地试验它一个月。然而,允许不受限制的访问显然是一个巨大的安全漏洞,从长远来看。
建议的做法是首先完全删除此规则,因为它允许任何人读取和写入数据库中的任何内容。然后,设计一些适当的规则,只允许访问最终用户应该能够访问的集合和文档。对此的全面讨论不在Stack Overflow的主题范围内(因为我们不知道您的应用的要求),但这里有一些开始学习安全规则的好地方:

您应该做的是为数据库中的每个集合和子集合调用访问约束。理想情况下,您应该锁定对所有集合的未经身份验证的写访问权限,除非绝对需要。在最好的情况下,您使用Firebase身份验证来帮助控制仅在经过身份验证的用户需要时对文档的访问。
或者,如果您已完成对数据库的操作(暂时),则可以通过专门使用以下规则完全阻止Web和移动的客户端对数据库的访问:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    allow read, write: if false;
  }
}

使用此规则,仍然允许使用Firebase Admin SDK或其他Cloud SDK从后端代码进行访问。

yzuktlbb

yzuktlbb2#

或者如果你像我一样,谁还在测试模式?只要更新日期

match /{document=**} {  
   // from previous date 2019, 12, 14 to new date 2020, 01, 4
   allow read, write: if request.time < timestamp.date(2020, 01, 4); 
}
o4tp2gmn

o4tp2gmn3#

每当你在firebase上启动一个新项目(或)设置一个firestore数据库时,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(XXXX, XX, XX);
    }
  }
}

“timestamp.date”的日期是从项目开始后的1个月。或多或少就像30天的免费试用。绕过这个日期后,数据库会拒绝所有客户端请求。因此,电子邮件基本上是提醒您更改安全规则。一个简单的方法是只允许对经过身份验证的用户的读/写请求。

// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

请注意,这是定义规则的方法之一,不需要完全按照所示,您可以根据您的需求进一步进行修改。

tgabmvqs

tgabmvqs4#

当你创建一个firestore数据库时,你有30天的访问权限。你的规则看起来像这样。

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if
          request.time < timestamp.date(2021, 8, 17);
    }
  }
}

日期部分在这里很重要。如果你想在测试模式下使用更长的时间,你可以增加这个日期。

request.time < timestamp.date(2021, 10, 30);

或者,最好在开发应用程序时将访问权限设置为任何经过身份验证的用户,例如

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

最好总是更加具体,尤其是在生产环境中部署时。在这种情况下,您的规则可以是:

match /some_collection/{userId}/{documents=**} {
      allow read, write: if request.auth != null && request.auth.uid == userId
    }

您可以在官方文档中阅读更多详细信息-https://firebase.google.com/docs/rules/basics

iugsix8n

iugsix8n5#

Firebase] Cloud Firestore数据库的客户端访问权限将在2天后过期
你选择在测试模式下开始开发,这会使你的Cloud Firestore数据库对互联网完全开放。由于你的应用容易受到攻击,因此你的Firestore安全规则已配置为在前30天后停止允许请求。在2天内% s),所有对Firestore数据库的客户端请求都将被拒绝。在此之前,请编写强有力的安全规则,使您的应用程序能够正常运行,同时适当地保护您的数据。如果您在过去24小时内修改了规则,则可能无法说明这些更改。
如果你从Firebase收到这种电子邮件,那么你必须去编辑规则,然后简单地更改日期。

pobjuy32

pobjuy326#

由于您在测试模式下使用Firestore,它提供了30天的试用期。之后,如果您想使用更长的时间,您需要更新Firestore中的规则。
您的当前规则如下所示:

rules_version = '2';
 service cloud.firestore {
   match /databases/{database}/documents {
     match /{document=**} {
       allow read, write: if
           request.time < timestamp.date(2022, 1, 18);
     }
   }
 }

现在你需要更新它!
或者,如果您想在测试模式下使用更长时间,您可以增加此日期(从今天起可以增加1个月)。
或者,最好在开发应用程序时将访问权限设置为任何经过身份验证的用户,例如

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if
          request.auth != null;
    }
  }
}

或者,如果您正在生产环境中部署。在这种情况下,您的规则可以是,

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if
          request.auth != null && request.auth.uid == userId;
    }
  }
}

只要改变你的规则的任何上述2条规则,你都很好去。

zengzsys

zengzsys7#

对于firebase v9,你可以只更新你想要使用测试数据库的时间框架,更新下面屏幕截图中显示的规则:

相关问题