Firebase规则允许在不应该

时间:2017-07-29 04:55:53

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

我有以下数据库条目:"公司:8": enter image description here

我有以下数据库规则,不允许模拟写"公司:8"到数据库。

{
  "rules": {
      ".read": "auth != null",
      ".write": "auth != null",
        "companies": {  
              ".validate": "(data.exists() && (newData.val() === data.val() + 1)) || (!data.exists() && newData.val() == 0)" 
        }
  }
}

enter image description here

然而,当我尝试写#34;公司:20"使用Firebase Python SDK进入数据库,这也是这些规则所不允许的,它可以工作:

In [1]: import firebase_admin

In [2]: from firebase_admin import credentials, db

In [3]: cred = credentials.Certificate('serviceAccountCredentials_dev_async.json
   ...: ')

In [4]: firebase_admin.initialize_app(cred, {'databaseURL': 'https://async-testi
   ...: ng.firebaseio.com/'})
Out[4]: <firebase_admin.App at 0x7fc50c00c080>

In [5]: ref = db.reference()

In [6]: ref.update({'companies': 20})

我做错了什么?

1 个答案:

答案 0 :(得分:3)

您使用的是Firebase Admin SDK,看起来像QueryUnescape。在这种情况下,没有应用安全规则,我认为甚至不是验证规则。

如果您有必要使用Admin SDK并希望执行验证规则,initializing with the credentials for a service account

  

作为最佳做法,服务应该只能访问资源   它需要。对资源进行更精细的控制a   Firebase应用实例可以访问,使用您的唯一标识符   用于表示您的服务的安全规则。然后设置合适的   允许您的服务访问所需资源的规则。