由于AngularFire文档很薄,而且它与Firebase的默认Web文档之间存在差异,我对如何最好地保护用户的创建,读取,更新和删除操作有点迷茫。
简而言之,假设我有一个管理商店的应用程序。用户可以是商店的所有者或顾客。所有者应该在他们的视图中阅读和编辑自己的商店,顾客应该阅读所有商店,但不要编辑他们视图中的商店。
我担心Firebase文档建议的方法的安全性,例如
例如,我们可以有如下规则来允许用户 创建注释,只要它们使用 评论:
{
"rules": {
".read": true,
"$comment": {
".write": "!data.exists() && newData.child('user_id').val() == auth.id"
}
}
}
对我来说,这意味着当我想以受害者的身份发表评论时,我可以通过简单地传入受害者的用户 ID 来破解我应用程序的数据。我错了吗?
我已经彻底阅读了安全文档,好几遍。我想我需要在这里进一步解释。到目前为止,通过客户端公开的参数进行识别是我能找到的唯一方法。
在此处显示的示例中,auth
是指经过身份验证的用户的令牌数据。这是 Firebase 在 auth() 事件期间设置的特殊变量,因此不是您可以在客户端破解的东西。换句话说,只有将user_id值设置为您自己的帐户 ID 时,才能编写注释。
auth
对象的内容取决于客户端的身份验证方式。例如,SimpleLogin 的密码提供程序将以下内容放入身份验证令牌中:provider
、email
和 id
;其中任何一个都可以在安全规则中使用。
也可以从服务器签署自己的令牌,当然天空是这里的极限。
但最重要的是,令牌的内部值由受信任的进程提供,而不是由客户端提供,因此用户无法更改。