我收到一封电子邮件,表明我正在“测试模式”下进行开发,但它使我的数据库完全向互联网开放。我最初接受的默认规则如下所示:
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);
}
}
}
需要做什么才能满足这封电子邮件的要求?
此处显示的安全规则与以前更加宽松的默认规则不同。这个规则的想法:
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 从后端代码进行访问。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)