Javascript 如何保护Firestore数据库免受不必要的访问?
我正在使用Firebase Firestore将事务列表存储在名为Javascript 如何保护Firestore数据库免受不必要的访问?,javascript,firebase,google-cloud-firestore,firebase-security,Javascript,Firebase,Google Cloud Firestore,Firebase Security,我正在使用Firebase Firestore将事务列表存储在名为transactions的集合中 我使用react从集合中获取事务,使用带有事务文档id的URL:http://myurl.com/h1kj54h2jk35h const id = match.params.id; firebase.firestore().collection('transactions').doc(id).get() 与创建新文档的方式相同。我没有firebase身份验证 如何确保Firestore规则的安全
transactions
的集合中
我使用react从集合中获取事务,使用带有事务文档id的URL:http://myurl.com/h1kj54h2jk35h
const id = match.params.id;
firebase.firestore().collection('transactions').doc(id).get()
与创建新文档的方式相同。我没有firebase身份验证
如何确保Firestore规则的安全:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /transactions/{id} {
allow read, write;
}
}
}
如果不允许写入,则无法创建新事务。
如果不允许读取,则无法读取事务,但我不希望允许读取所有事务。当URL中的id有效时,仅此一次
因此,我正在寻找一种方法来保护我的数据库,防止不必要的文档创建和不必要的文档读取。我想您正在寻找所谓的。从该链接: 在某些情况下,将读写分解为更细粒度的操作是很有用的。例如,您的应用程序可能希望在创建文档时强制执行与删除文档时不同的条件。或者,您可能希望允许读取单个文档,但拒绝大型查询
读取
规则可以分为获取
和列表
,而写入
规则可以分为创建
、更新
和删除
因此,如果您只想允许创建新文档,并获取用户必须知道其ID的文档,则应该是:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /transactions/{id} {
allow create, get;
}
}
}
{id}
占位符是否表示只有该id有效?我认为这是事务中任何文档的占位符。如果我想在url中有正确的id
时更新文档,那么写也可以?它是安全的,可以防止不必要的写入?啊,我明白了。据我所知,{id}
只是任何文档的占位符。get
指定只获取我请求的一个文档。虽然不允许使用list
,但不能运行curl-X GET“https://firestore.googleapis.com/v1beta1/projects/test-375f8/databases/(默认)/文档/事务“
以查看数据库。我说得对吗?这取决于curl
request访问数据库时使用的凭据。但是,任何符合安全规则的访问都只能创建新的事务或获取特定的事务,而该事务的ID已经使用这些规则。您会像这样保护敏感数据吗?