【问题标题】:How do I prevent un-authorized access to my Firebase Realtime Database?如何防止未经授权访问我的 Firebase 实时数据库?
【发布时间】:2024-05-22 03:00:02
【问题描述】:

如何防止其他用户通过我的 Firebase URL 访问我的实时数据库?我必须怎么做才能将其仅保护到我的域?

【问题讨论】:

    标签: firebase firebase-security


    【解决方案1】:

    首先,请了解您无法根据源域保护 Internet 上的任何 URL——恶意用户可以简单地撒谎。保护源域仅有助于防止跨站点欺骗攻击(恶意来源伪装成您的站点并欺骗您的用户代表他们登录)。

    好消息是,用户从一开始就无法通过未经授权的域进行身份验证。您可以在 Forge 中设置您的授权域:

    • 在浏览器中输入您的 Firebase 网址(例如 https://INSTANCE.firebaseio.com/
    • 登录
    • 单击“身份验证”选项卡
    • 将您的域添加到授权请求来源列表中
    • 选择您要使用的“提供者”并进行相应配置

    现在为了保护您的数据,您将转到安全选项卡并添加安全规则。一个好的起点如下:

    {
       "rules": {
           // only authenticated users can read or write to my Firebase
           ".read": "auth !== null",
           ".write": "auth !== null"
       }
    }
    

    安全规则是一个大话题。你会想get up to speed by reading the overview and watching this video

    【讨论】:

    • 我想开发一个用户无需登录即可使用的应用程序。但我担心是否有人浏览了我网站的源代码,并获取了我的公开写入的 firebase url,然后将其用于他自己的读写过程。我已将 www.google.com 添加为授权 url,但我可以从具有我的应用程序文件的不同主机的 ip 写入我的 firebase。
    • 如前所述,您无法阻止任何人在未对某些变体进行身份验证的情况下写入您的 Firebase(或网络上的任何其他内容)。
    • 我看到这就像一个 rdbms 数据库身份验证。谢谢。
    • 如果他们实际上是同一个人(即他们有用户名和密码),那么他们从哪里连接有什么区别?使用验证规则和安全性来防止未经授权的写入,并且不要担心人为/无效的约束,例如来源。
    • 是的。我很确定这正是我所说的?白名单是为了防止跨站点欺骗,而不是为了防止请求来源。
    【解决方案2】:
    1. 设置安全规则, 学习来源:https://firebase.google.com/docs/rules

    2. 使用模拟器(它会使初学者程序员不容易看到键) ,来源:https://firebase.google.com/docs/rules/emulator-setup

    3. 云函数(它将隐藏集合和文档的名称) , https://firebase.google.com/docs/functions

    4. 将 API 密钥限制为特定网站/s(这将使人们无法从外部访问您的网站/应用程序)

    如果有人知道更多方法,请告诉,没有人是完美的。

    【讨论】:

      最近更新 更多