FireBase您的实时数据库具有不安全的规则 [英] Firebase Your Realtime Database has insecure rules

查看:15
本文介绍了FireBase您的实时数据库具有不安全的规则的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直收到有关我的Firebase规则不安全的电子邮件通知,即使我将数据设置为只有经过身份验证的用户才能读取,并将写入设置为False。我的应用程序基本上显示货币汇率,一旦应用程序加载,我就创建一个匿名用户,以便用户能够读取数据,所以我认为有这样的规则是有意义的?以下是我的规则:

{
  "rules": {
    ".read": "auth.uid != null",
    ".write": false
  }
}

更新:我将规则更新为:

{
  "rules": {
    "currencies":{
       ".read": "auth.uid != null",
    },
    ".write": false
  }
}

下面是我的数据: (https://i.stack.imgur.com/in1BV.png)

推荐答案

我将数据设置为只有经过身份验证的用户才能读取

虽然这是一个很好的起点,但这意味着我可以通过登录并读取根目录来获取您(用户)的所有数据。这不安全,很容易被滥用,这就是您收到有关它的警报的原因。

您应该遵循最低权限原则,并且在规则中只允许您的代码执行的操作。


万一您的代码确实读取了根目录,您可以在Firebase控制台中disable the alert


在所有其他情况下,您需要将读取权限降低到您的代码读取它的确切方式。例如,如果您的代码从两个顶级节点读取,您可以使用:

来保护它
{
  "rules": {
    "users": {
      ".read": "auth.uid != null",
    },
    "messages": {
      ".read": "auth.uid != null",
    },
    ".write": false
  }
}

在这样的场景中,您可能需要先阅读/messages,然后再阅读这些消息中提到的特定用户的配置文件信息。您可以像这样更好地保护它:

{
  "rules": {
    "users": {
      "$uid": { 
        ".read": "auth.uid != null",
      }
    },
    "messages": {
      ".read": "auth.uid != null",
    },
    ".write": false
  }
}
现在,恶意用户不能一次读取/users的所有内容,但只能在知道UID后才能读取配置文件。有足够积极性的用户仍然可以读取您的整个数据库,但这需要付出更多的努力-这会阻止滥用。


还要考虑用户是否需要阅读所有消息,或者(比方说)可能只需要阅读最近的50条消息。后一种用例可以通过query based security rules更好地保护:

"messages": {
  ".read": "auth.uid != null &&
            query.orderByChild == 'timestamp' && &&
            query.limitToLast <= 50"
},

现在用户只能阅读最新的50封邮件,因此(与上一封邮件一起)也只能阅读参与这些邮件的用户配置文件。


以黄金法则结束:只允许在您的规则中完全允许您的代码所做的事情。请确保您的代码正常工作,但任何不同的API调用都会被拒绝。

这篇关于FireBase您的实时数据库具有不安全的规则的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆