Sco*_*zie 4 firebase firebase-security firebase-realtime-database
我想在 Firebase 中指定规则,以便只有已知的路径才能访问。
/root
/messages
/message1
/message2
/message3
Run Code Online (Sandbox Code Playgroud)
如果您访问 /messages,您可能会收到权限被拒绝的消息(或什么也没有)。
如果您显式访问 /messages/message2,您将获得内容。
更新 1:预期行为 (iOS)
FIRDatabase .database() .reference() .child("邀请") .observeEventType(.Value, withBlock: { 快照中
// 快照不返回任何内容或权限被拒绝。})
FIRDatabase
.database()
.reference()
.child("invitations/message1")
.observeEventType(.Value, withBlock: { snapshot in
// snapshot returns message1
})
Run Code Online (Sandbox Code Playgroud)
这不是答案,但我相信OP正在询问如何防止枚举给定节点下的节点,同时如果用户知道给定节点的直接路径,则允许匿名访问。
我也一直在试图弄清楚如何做到这一点。基本上,我试图在给定节点下发布半敏感数据,同时通过不同的方式安全地提供节点的名称。但是,我不想在 Firebase 中实现“安全/用户”模型。我只是想使用类似于 Amazon S3 存储桶的 Firebase,如果您知道密钥的位置,则可以下载存储在该位置的文件/数据,同时仍然防止枚举/列出数据库中的节点。
此类用法的一个示例是,如果您使用 SHA2 等加密摘要生成密钥名。密钥不容易生成,但如果知道密钥,就可以直接访问该节点。有谁知道如何做到这一点?
编辑:我想出了如何在 Firebase 中执行此操作。解决方案相当简单。以下是 Firebase 中 JSON 安全规则的示例:
{
"rules": {
"users" : {
".read": false,
".write": false,
"$child" : {
".read" : true,
".write" : true
}
},
"chats" : {
".read" : false,
".write" : false,
"$child" : {
".read" : true,
".write" : true,
},
},
"comments" : {
".read" : false,
".write" : false,
"$child" : {
".read" : true,
".write" : true
},
},
".read": false,
".write": false
}
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,“用户”、“聊天”和“评论”下的任何节点都可以直接访问,但不再可能进行枚举。
| 归档时间: |
|
| 查看次数: |
936 次 |
| 最近记录: |