Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与用户一起保护Firebase CRUD操作_Firebase_Angularfire_Firebase Security - Fatal编程技术网

与用户一起保护Firebase CRUD操作

与用户一起保护Firebase CRUD操作,firebase,angularfire,firebase-security,Firebase,Angularfire,Firebase Security,由于AngularFire文档很薄,而且它与Firebase的默认web文档之间存在差异,因此我对如何最好地保护用户的创建、读取、更新和删除操作有点茫然 简而言之,假设我有一个管理商店的应用程序。用户可以是店主或顾客。所有者应在其视图中阅读和编辑自己的店铺,而用户应在其视图中阅读所有店铺,但不编辑任何店铺 我担心Firebase文档建议的方法的安全性,例如 例如,我们可以有如下规则来允许用户 只要将用户id存储在 评论: 对我来说,这意味着当我想以受害者的身份发布评论时,我可以通过简单地传递受害

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

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

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

例如,我们可以有如下规则来允许用户 只要将用户id存储在 评论:

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


我已经彻底阅读了安全文档,好几次了。我想我需要进一步的解释。通过客户端公开的参数进行识别是目前为止我能找到的唯一方法。

在这里显示的示例中,
auth
指的是经过身份验证的用户的令牌数据。这是Firebase在auth()事件期间设置的一个特殊变量,因此您无法在客户端破解它。换句话说,只有将user_id值设置为您自己的帐户id时,您才能编写注释

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

也可以从服务器访问,当然这里的天空是有限的


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

在这里显示的示例中,
auth
指的是经过身份验证的用户的令牌数据。这是Firebase在auth()事件期间设置的一个特殊变量,因此您无法在客户端破解它。换句话说,只有将user_id值设置为您自己的帐户id时,您才能编写注释

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

也可以从服务器访问,当然这里的天空是有限的


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

哦,这是个好消息。因此,我可以将auth对象中的这些超长auth字符串与相关数据的属性进行匹配。但是,这些标记中的某些标记是否会因过期等原因而发生更改?我担心,如果我将数据连接到这样一个令牌,一旦令牌发生变化,它们就会突然被锁定在数据之外。如果Firebase的任何人正在监听,我建议集成类似Kinvey的东西,每个集合可以有四个通用访问模板中的一个,或者可以选择返回到业务逻辑,就像Firebase的规则一样。我想你不明白——身份验证数据绑定到它的关联帐户(即用户名和密码的组合)。它不会过期。您匹配的不是令牌本身,而是安全身份验证变量(即电子邮件或id)中包含的数据。仍然不完全正确=P。用户不能随意修改其身份验证变量。auth变量是从身份验证期间提供的令牌安全创建的(向下滚动到部分),客户端无法修改。换句话说,一个人不只是走进魔多。Firebase的工作人员比这聪明多了……哦,这是个好消息。因此,我可以将auth对象中的这些超长auth字符串与相关数据的属性进行匹配。但是,这些标记中的某些标记是否会因过期等原因而发生更改?我担心,如果我将数据连接到这样一个令牌,一旦令牌发生变化,它们就会突然被锁定在数据之外。如果Firebase的任何人正在监听,我建议集成类似Kinvey的东西,每个集合可以有四个通用访问模板中的一个,或者可以选择返回到业务逻辑,就像Firebase的规则一样。我想你不明白——身份验证数据绑定到它的关联帐户(即用户名和密码的组合)。它不会过期。您匹配的不是令牌本身,而是安全身份验证变量(即电子邮件或id)中包含的数据。仍然不完全正确=P。用户不能随意修改其身份验证变量。auth变量是从身份验证期间提供的令牌安全创建的(向下滚动到部分),客户端无法修改。换句话说,一个人不只是走进魔多。Firebase的工作人员比这聪明多了。。。
{
  "rules": {
    ".read": true,
    "$comment": {
      ".write": "!data.exists() && newData.child('user_id').val() == auth.id"
    }
  }
}