当数据库在多个实例之间共享时,Firestore 规则
Firestore rules when a database is shared across multiple instances
假设有一个 Firestore 数据库被 1 - 静态 front-end 客户端 和 2 - node.js 使用服务器.
基本上,只有 domain
和 ip address
可以使用该数据库,效果很好。
棘手的部分:
- 我们希望 node.js 服务器 read/write 在整个数据库上
- 但如果用户经过身份验证,则只应允许 web-client 在同一数据库上 read/write。
问题是 rules
无法将我们的 ip address
.
列入白名单
所以我们尝试使用这个:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
然后 node.js 服务器可以 signInAnonymously
,而 front-end 客户端需要在访问任何内容之前验证用户。
我的问题
signInAnonymously 是否足够安全?
因为 anonymous auth
开启了,有人可以从我们的 front-end 中 signInAnonymously
吗?
有人可能会欺骗某些 header 并假装是我们的域只是为了验证自己的匿名性吗?
对于这种情况,最佳做法是什么?
也许我可以分两部分解释,
首先,没有必要有人欺骗一些 header 并假装是您的域。原因是如果有人可以直接从您的域以匿名身份登录,他们就可以访问您允许他们访问的所有信息
其次,也是最重要的一点是,我认为您对 firebase 的 NodeJS 服务器端访问有误。如果您想从节点服务访问整个数据库,请使用 Firebase admin SDK,并且当您从 firebase admin SDK 连接时,您无需进行任何类型的身份验证即可读写,因为您具有管理员访问权限。
仅供参考,您还可以从身份验证设置中将您的授权 IP 列入白名单,您可以在其中允许列入白名单的域
假设有一个 Firestore 数据库被 1 - 静态 front-end 客户端 和 2 - node.js 使用服务器.
基本上,只有 domain
和 ip address
可以使用该数据库,效果很好。
棘手的部分:
- 我们希望 node.js 服务器 read/write 在整个数据库上
- 但如果用户经过身份验证,则只应允许 web-client 在同一数据库上 read/write。
问题是 rules
无法将我们的 ip address
.
所以我们尝试使用这个:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
然后 node.js 服务器可以 signInAnonymously
,而 front-end 客户端需要在访问任何内容之前验证用户。
我的问题
signInAnonymously 是否足够安全?
因为 anonymous auth
开启了,有人可以从我们的 front-end 中 signInAnonymously
吗?
有人可能会欺骗某些 header 并假装是我们的域只是为了验证自己的匿名性吗?
对于这种情况,最佳做法是什么?
也许我可以分两部分解释,
首先,没有必要有人欺骗一些 header 并假装是您的域。原因是如果有人可以直接从您的域以匿名身份登录,他们就可以访问您允许他们访问的所有信息
其次,也是最重要的一点是,我认为您对 firebase 的 NodeJS 服务器端访问有误。如果您想从节点服务访问整个数据库,请使用 Firebase admin SDK,并且当您从 firebase admin SDK 连接时,您无需进行任何类型的身份验证即可读写,因为您具有管理员访问权限。
仅供参考,您还可以从身份验证设置中将您的授权 IP 列入白名单,您可以在其中允许列入白名单的域