如何防止未经授权访问我的 Firebase 实时数据库?

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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】:

    设置安全规则, 学习来源:https://firebase.google.com/docs/rules

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

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

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

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

【讨论】:

以上是关于如何防止未经授权访问我的 Firebase 实时数据库?的主要内容,如果未能解决你的问题,请参考以下文章

防止未经授权的用户直接访问上传的文件 - Symfony

未经授权的所有用户的 Firebase 数据

数据库上的 Firebase 身份验证规则

Next.js:在实现私有路由时,如何在重定向之前防止未经授权的路由/页面的闪烁?

使用 Axios 和 Firebase 时出现 401 未经授权的错误

Django Rest Framework 和 React 前端:如何防止未经授权的用户在获得图像 URL 的情况下查看私人图像?