使用用户保护Firebase CRUD操作

时间:2013-10-18 15:19:12

标签: firebase angularfire firebase-security

由于精简的AngularFire文档及其与Firebase的默认Web文档之间的差异,我对如何最好地保护用户的创建,读取,更新和删除操作感到遗憾。

简而言之,我说有一个管理商店的应用程序。用户可以是商店或顾客的所有者。业主应该在他们的视图中阅读和编辑他们自己的商店,顾客应该阅读所有商店,但在他们的视图中不编辑任何商店。

我担心Firebase文档(例如

)的建议方法的安全性
  

因此,例如,我们可以使用以下规则来允许用户   只要用户存储用户ID就可以创建评论   评价:

{
  "rules": {
    ".read": true,
    "$comment": {
      ".write": "!data.exists() && newData.child('user_id').val() == auth.id"
    }
  }
}

对我来说,这意味着我可以通过简单地传递受害者的用户ID来破解我的应用程序的数据,当我想发布评论时。我错了吗?

我已经多次彻底阅读了安全文档。我想我需要在这里进一步解释。通过客户端暴露的参数进行识别是迄今为止我能找到的唯一方法。

1 个答案:

答案 0 :(得分:4)

在此处显示的示例中,auth指的是经过身份验证的用户的令牌数据。这是Firebase在auth()事件期间设置的特殊变量,因此不是您可以在客户端破解的内容。换句话说,如果您将user_id值设置为您自己的帐户ID,则只能编写评论。

auth对象的内容取决于客户端的身份验证方式。例如,SimpleLogin的password提供程序会将以下内容放入身份验证令牌:provideremailid;任何可以在安全规则中使用的。

也可以从服务器sign your own tokens,当然天空是限制。

但最重要的是,令牌的内部值由受信任的进程提供,而不是由客户端提供,因此用户无法更改。