【问题标题】:Securing Firebase CRUD operations with users与用户一起保护 Firebase CRUD 操作
【发布时间】:2013-10-27 12:07:36
【问题描述】:

由于 AngularFire 文档很薄,并且它与 Firebase 的默认 Web 文档之间存在差异,我有点迷茫如何最好地保护用户的创建、读取、更新和删除操作。

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

我担心 Firebase 文档所建议方法的安全性,例如

例如,我们可以有如下规则来允许用户 创建 cmets 只要他们将用户 ID 与 评论:

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

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

我已多次彻底阅读安全文档。我想我需要在这里进一步解释。通过客户端公开的参数进行识别是目前我能找到的唯一方法。

【问题讨论】:

    标签: firebase angularfire firebase-security


    【解决方案1】:

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

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

    也可以从服务器上sign your own tokens,当然这里没有限制。

    但底线是令牌的内部值是由受信任的进程而不是由客户端提供的,因此用户不能更改。

    【讨论】:

    • 哦,这是个好消息。因此,我可以将 auth 对象中的这些超长 auth 字符串与相关数据的属性进行匹配。
    • 但是由于到期等原因,其中一些令牌不会发生变化吗?我担心如果我将数据连接到这样的令牌,一旦令牌更改,他们会突然被锁定在数据之外。
    • 如果 Firebase 的任何人在听,我建议集成 Kinvey 所拥有的东西,其中每个集合可以有四个通用访问模板之一,或者它可以选择回退到业务逻辑,如 Firebase 的规则。
    • 我认为你不明白 - 身份验证数据与其关联的帐户相关联(即用户名和密码的组合)。它不会过期。而且你匹配的不是令牌本身,而是包含在安全身份验证变量(即电子邮件或 id)中的数据。
    • 还是不太对=P。用户不能随意修改他/她的身份验证变量。 auth 变量是从身份验证期间提供的令牌安全地创建的(向下滚动到 After Authenticating 部分),并且不能被客户端修改。换句话说,一个人不会简单地走进魔多。 Firebase 的工作人员比这聪明得多……
    猜你喜欢
    • 1970-01-01
    • 2016-12-16
    • 2017-03-17
    • 2018-07-10
    • 2021-02-03
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多