由于精简的AngularFire文档及其与Firebase的默认Web文档之间的差异,我对如何最好地保护用户的创建,读取,更新和删除操作感到遗憾。
简而言之,我说有一个管理商店的应用程序。用户可以是商店或顾客的所有者。业主应该在他们的视图中阅读和编辑他们自己的商店,顾客应该阅读所有商店,但在他们的视图中不编辑任何商店。
我担心Firebase文档(例如
)的建议方法的安全性因此,例如,我们可以使用以下规则来允许用户 只要用户存储用户ID就可以创建评论 评价:
{
"rules": {
".read": true,
"$comment": {
".write": "!data.exists() && newData.child('user_id').val() == auth.id"
}
}
}
对我来说,这意味着我可以通过简单地传递受害者的用户ID来破解我的应用程序的数据,当我想发布评论时。我错了吗?
我已经多次彻底阅读了安全文档。我想我需要在这里进一步解释。通过客户端暴露的参数进行识别是迄今为止我能找到的唯一方法。
答案 0 :(得分:4)
在此处显示的示例中,auth
指的是经过身份验证的用户的令牌数据。这是Firebase在auth()事件期间设置的特殊变量,因此不是您可以在客户端破解的内容。换句话说,如果您将user_id值设置为您自己的帐户ID,则只能编写评论。
auth
对象的内容取决于客户端的身份验证方式。例如,SimpleLogin的password提供程序会将以下内容放入身份验证令牌:provider
,email
和id
;任何可以在安全规则中使用的。
也可以从服务器sign your own tokens,当然天空是限制。
但最重要的是,令牌的内部值由受信任的进程提供,而不是由客户端提供,因此用户无法更改。