正确设置Firebase DB的安全性的方法

时间:2017-02-24 20:45:00

标签: javascript express firebase firebase-realtime-database firebase-security

好的,我对Firebase有以下用例:

客户希望我们存储表单中的数据并将其放入数据库中。这是使用Express。

在后端处理的

这必须很快完成,所以我只想确保我做得正确。

我目前有规则允许读写访问成立。鉴于用户只能通过表单输入数据,这在生产中是否可以?他们无法访问API密钥,因此其他用户无法处理数据?

2 个答案:

答案 0 :(得分:3)

从您的描述中听起来像是:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

这意味着任何能够找到数据库URL(https://yours.firebaseio.com)的人都可以写入数据库。如果他们使用您的表单,直接使用Firebase SDK,或者即使他们只使用curl发出REST请求也无关紧要:

curl -X DELETE 'https://yours.firebaseio.com/.json'

最后一行将删除整个数据库。所有这一切都需要一个恶意用户或一个错误的开发(这比你想象的要多得多)。

所以你真的应该将数据库安全规则设置为:

  1. 验证数据的格式是否正确
  2. 确保只有经过身份验证的用户才能访问他们已获得
  3. 授权的数据

答案 1 :(得分:2)

是的,将读取和写入权限设置为true是一个很大的安全漏洞,原因有多种:

  • 如果您处理任何个人信息,公开read访问会为您的用户带来隐私问题。
  • 如果您在未经他人同意的情况下向公众公开其商业数据,这也是对您的客户的违反保密规定。
  • 公开write访问权限允许拥有数据库URL的任何人随意删除或修改其内容。

另请注意,如果您的应用通过其前端向用户公开Firebase,那么获取数据库网址就像阅读应用的HTML源代码一样简单。

你可以做什么,但是

通过服务器端验证您的应用程序并设置对数据库的私有访问权限。请查看如何创建service account,还详细here

如果您使用较旧版本的firebase,则必须使用server tokens

希望这有帮助!