是否有人可以操纵我的Firebase数据库?

时间:2016-09-25 16:14:08

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

只是想知道...... 由于Firebase的初始化在脚本标记中是公开的:

<script>
  // Initialize Firebase
  var config = {
    apiKey: "key",
    authDomain: "domain",
    databaseURL: "url",
    storageBucket: "bucket",
    messagingSenderId: "id"
  };
  firebase.initializeApp(config);
</script>

理论上不可能,有了这些信息,任何人都可以操纵数据库吗?

2 个答案:

答案 0 :(得分:2)

由于Firebase是云托管数据库,因此您的用户需要访问它。该脚本中的信息允许每个人找到您的数据库,从而访问它。

但是通过实现@FowotadeBabajide链接到您的安全规则,您可以控制谁可以访问哪些数据,并验证数据是否符合您的应用所期望的格式。

主题非常广泛,因此我建议从Firebase documentation on database security开始,然后使用标记阅读一些问题。

答案 1 :(得分:1)

这取决于您如何设置读取和写入数据到firebase数据库中的节点的权限(实时数据库规则语言)。

示例应用场景:

  

Firebase数据库规则设计:

  • 假设一个节点(又名“父”),其中每个用户都有权在auth之后创建一个子节点。

    {
      "rules": {
        "parent":
            ".read": true,
            ".write": "auth != null"
      }
    }
    
  

Firebase数据库操作:

  1. 用户2通过“push()”“推送”数据并创建一个新的子节点(randomIdforchild2)。

    parent
    |--randomIdforchild2
       |--resetparentData: false
       |--addData: true
    
  2. 用户3通过“push()”“推送”一些数据,从而产生一个新的子节点(randomIdforchild3)。

    parent
    |--randomIdforchild2
    |  |--resetparentData: false
    |  |--addData: true
    |--randomIdforchild3
       |--resetparentData: false
       |--addData: true
    
  3. 用户1通过“set()”向父节点添加数据。这将重置父节点。

    parent
    |--childNodeNameByUser1
       |--resetparentData: true
       |--addData: true
    
  4. 对于此特定方案,您应重新考虑数据结构和节点访问权限(firebase数据库安全规则)。

    由于每个用户都拥有权限,探索开发人员“用户1”实际上可以发出“set()”请求来代替覆盖以前数据的“push()”。在这里,您需要重新构建数据模型。

    在您的情况下可能会有所不同。

    希望这能让你清楚。

    参考:Understand Firebase Realtime Database Rules