繁体   English   中英

Firebase 你的实时数据库有不安全的规则

[英]Firebase Your Realtime Database has insecure rules

我收到了 email 条关于我的 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 控制台中禁用警报


在所有其他情况下,您将希望将读取权限减少到您的代码读取它的方式。 例如,如果您的代码从两个顶级节点读取,您可以通过以下方式保护它:

{
  "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
  }
}

现在恶意用户无法读取一个 go 中的所有/users ,但只有在知道 UID 后才能读取配置文件。 一个足够积极的用户仍然可以阅读你的整个数据库,但需要付出更多的努力——这会阻止滥用。


还要考虑用户是否需要阅读所有消息,或者(比如)可能只需要阅读最近的 50 条消息。 您可以使用基于查询的安全规则更好地保护后一种用例:

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

现在用户只能阅读最近的 50 条消息,因此(与之前的一样)也只能阅读参与这些消息的用户配置文件。


以黄金法则结束:在你的规则中只允许你的代码做的事情。 确保您的代码有效,但任何不同的 API 调用都会被拒绝。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM