Firebase告诉我我的数据库不安全,因为我有规则:
service cloud.firestore {
match /databases/{database}/documents {
match /mypath/{document=**} {
allow write: if true;
allow read, delete: if false;
}
}
}
我没有关于读取和删除的问题,因为只有使用FirebaseAdmin的服务器才能执行此类操作。但是我仍然有关于写操作的问题。这就是我切换到此配置的原因:
service cloud.firestore {
match /databases/{database}/documents {
match /mypath/{document=**} {
allow write: if request.resource.data.psw == 'mypassword';
allow read, delete: if false;
}
}
}
我的想法是在应用程序的配置文件中写入一个密码,然后将要保存在Firestore上的数据与密码一起使用。这种方法安全还是有更好的方法?
感谢您的任何建议。
您正在使用的方案根本不安全,因为您要将“秘密”发送到客户端应用程序。您包含在应用程序中的任何信息基本上都是公共信息,因为很容易分解移动或网络应用程序的数据以查看其工作原理。
安全的方法是使用Firebase身份验证来限制谁可以读取或写入某些数据。这是按用户保护数据库的唯一方法。无法基于每个应用安全地限制对数据库的访问。
请记住,您现在所拥有的还允许任何客户端update任何已知文档而无需提供密码。对于先前最初正确设置的更新,将正确设置request.resource.data.psw
。这是因为request.resource.data
包含所有先前文档的内容,以及更新中添加的所有更改。
[如果由于某种原因而无法使用Firebase身份验证,那么您现在可以做的是您能做的最好的事情,但实际上应该知道它不是很安全。