Firebase实时数据库不安全规则警告



我不断收到电子邮件,说我的数据库在实施我的安全规则后不安全。电子邮件指定任何经过身份验证的用户都可以读/写我的数据库,但我实现了特定的访问规则:

{
"rules": {
"posts": {
".read": "auth.uid !== null",
".write": "auth.uid !== null && newData.hasChildren(['score', 'quote', 
'description', 'source', 'sourceType', 'ownerID', 'ownerImageURl', 'ownerUsername', 'timestamp', 'usersVoted'])",
".indexOn":["sourceType", "ownerID"],
"$postID": {
".write": "!data.hasChild('ownerID')",
"score": {
".write": "newData.isNumber() && (newData.val() === data.val() + 1 || newData.val() === data.val() - 1) && !root.child('posts').child('$postID').child('usersVoted').hasChild(auth.uid)"
},
"usersVoted": {
".write": "!data.hasChild(auth.uid)",
"$userID": {
".write": false
}
}
} 
},
"users": {
".write":"auth.uid !== null && !data.hasChild(auth.uid)",
"$userID": {
".read": "auth.uid === $userID",
".write": "auth.uid === $userID"
}
},
"comments": {
".read": "auth.uid !== null",
"$postID": {
".write": "auth.uid !== null",
"$commentID": {
".write": false  
}
}
}

}
}

为什么Firebase认为任何用户都可以读/写我的数据库中的任何位置?

编辑:我有一段时间没有收到邮件了,所以我认为我的规则是安全的。

例如,users节点的规则是不安全的:

"users": {
".write":"auth.uid !== null && !data.hasChild(auth.uid)",
"$userID": {
".read": "auth.uid === $userID",
".write": "auth.uid === $userID"
}
}

因为,该规则允许任何经过身份验证的用户和不存在的用户写入您的用户节点(不安全):

".write":"auth.uid !== null && !data.hasChild(auth.uid)",

,它覆盖了这个规则(好像这现在没有意义了):

".write": "auth.uid === $userID"

要使其安全,users规则必须像这样:

"users": {
"$userID": {
".write":"auth.uid !== null && !data.hasChild(auth.uid) && auth.uid === $userID",
".read": "auth.uid === $userID"
}
}

所以修改你的规则,小心rules CASCADING。

最新更新