Orb*_*boo 3 firebase firebase-security firebase-realtime-database
我想创建一个时事通讯订阅表格。这意味着用户无需创建帐户即可注册我的新闻通讯。
我想做一个简单的插入。但确保其安全的最佳方法是什么?
我已经实现了“匿名登录”(https://firebase.google.com/docs/auth/web/anonymous-auth)
我需要基本规则,read检查用户是否已注册并将write用户数据推送到实时数据库中。
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
Run Code Online (Sandbox Code Playgroud)
匿名登录完成后,我将推送到实时数据库。
let dbConnection = firebase.database().ref('/newsletter_user');
dbConnection.push(datas).then(callback);
Run Code Online (Sandbox Code Playgroud)
问题是匿名身份验证不检查身份验证域。(如何在 firebase 中阻止 localhost?)
这意味着用户可以获取我的 ApiKey 并向我的 realbase 数据库执行插入或读取数据。
那么它对我来说似乎并不真正安全。我可以做什么来提高安全性?
为了提高安全性,您可以做的一件事就是限制数据库访问。目前,您的数据库有基本的读/写规则,这意味着经过身份验证的人可以在您的数据库中执行任何操作。如果我愿意,我可以在您的节点中编写整个百科全书datadump:)
因此,您可以做的第一件事就是限制对特定位置的读/写访问:
{
"rules": {
"newsletter_user" : {
".read": "auth != null",
".write": "auth != null"
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我只能在newsletter_user节点下做一些事情了。
接下来,您可以使用验证规则来确保只能写入您想要的数据:
{
"rules": {
"newsletter_user" : {
".read": "auth != null",
".write": "auth != null",
// a valid newsletter_user must have attributes "color" and "size"
// allows deleting newsletter_user (since .validate is not applied to delete rules)
".validate": "newData.hasChildren(['color', 'size'])",
"size": {
// the value of "size" must be a number between 0 and 99
".validate": "newData.isNumber() &&
newData.val() >= 0 &&
newData.val() <= 99"
},
"color": {
// the value of "color" must exist as a key in our mythical
// /valid_colors/ index
".validate": "root.child('valid_colors/' + newData.val()).exists()"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
531 次 |
| 最近记录: |