如何在AngularFire中防止类似$ remove的黑客攻击

时间:2016-08-09 18:51:28

标签: angularfire

所有

我是AngularFire的新手,当我按照教程做一个简单的待办事项应用程序时,我想我怎么能只允许用户添加新的待办事项,但不能删除。基本上我不希望客户端黑客破坏我的数据。就像用户打开控制台并手动调用$ remove API一样,我该怎么做呢?

由于

1 个答案:

答案 0 :(得分:3)

要阻止客户在Firebase数据库上执行不需要的CRUD操作,您需要定义database rules

规则在JSON结构中定义,可以引用当前的auth信息。例如,如果要将用户信息存储在/users/<uid>下的数据库中,则以下规则将授予每个用户对其自身信息的读/写访问权限以及对其他用户的读取权限。信息:

{
  "rules": {
    "users": {
      ".read": "auth != null"
      "$uid": {
        ".write": "auth != null && auth.uid == $uid"
      }
    }
  }
}

规则还可以引用数据库中已有的数据,因此只有在特定密钥上没有现有数据时才允许写入 - 也就是说,您可以阻止更新。

同样,规则可以引用要存储的新数据,因此可以检查是否已指定新数据 - 也就是说,您可以阻止删除。

这样的规则允许创建todos(存储在/todos/<uid>/<todoId>下),但既不更新也不删除:

...
"todos": {
  "$uid": {
    ".read": "auth != null && auth.uid == $uid",
    "$todoId": {
      ".write": "auth != null && auth.uid == $uid && data.val() == null && newData.val() != null"
    }
  }
}
...

维护JSON结构中的规则定义会变得困难;您可能会发现Firebase的Bolt工具可用于定义更复杂的规则。