如何确保只有我自己的网站(客户端代码)可以与Firebase后端通信

how to make sure only my own website (clientside code) can talk to Firebase backend?

本文关键字:代码 Firebase 通信 后端 客户端 自己的 何确保 确保 有我 网站      更新时间:2023-09-26

我读过关于Firebase的文章,它看起来很棒。我已经阅读了有关身份验证以及如何根据规则授权某些登录用户执行不同操作的信息。艾尔好。

但是,我不确定另一种类型的安全性:如何确保只有我自己的网站(使用客户端javascript)可以与我的Firebase后端通信?我问是因为 afaik 没有办法阻止任何人从客户端代码(指向我的特定 firebase 后端的 url)中查找我的 firebase 端点并开始使用它,天知道是什么。

在我想打开对匿名用户角色的写入的情况下,这尤其令人担忧。(例如:也许是一些分析)

任何帮助我对此的头脑都非常感谢。

更新(2021 年 5 月):借助名为 Firebase 应用检查的新功能,现在可以将对后端服务的调用限制为仅来自 Firebase 项目中注册的 iOS、Android 和 Web 应用的请求。

你通常需要将此与 Kato 下面描述的基于用户身份验证的安全性相结合,以便对使用你的应用的滥用用户有另一个防护。

在我看来,这与其说是关于Firebase安全性的问题,不如说是对当今互联网架构的一般性讨论。由于网络是一个开放的平台,因此您无法阻止任何人访问网址(包括您的 Firebase),就像您无法阻止某人在现实世界中开车经过您的房屋一样。如果可以的话,访问者仍然可以对原产地撒谎,也没有办法阻止这种情况。

通过身份验证保护您的数据。使用 Forge 中的授权域来防止 CSRF。制定安全规则,防止用户执行不该执行的操作。使用服务器来防止的大多数数据写入都可以仅通过安全规则来完成。

这实际上是Firebase和API服务的更优质品质之一。客户端是完全隔离的,因此易于更换或扩展。只要你能证明你被允许进入,并遵守规则,你从哪里打电话并不重要。

关于匿名访问,如果你可以让它们只从你的网站访问,那仍然不会阻止恶意写入(我可以打开我的JavaScript调试器,坐在你的网站上写任意次数)。相反,对匿名用户可写入的数据的格式、内容和长度设置严格的安全规则,或者节省一些时间,找到现有的服务来为您处理分析,例如无处不在的Google Analytics。

当然,您可以像使用任何数据存储一样使用服务器作为中介。这对于某些高级逻辑非常有用,这些逻辑无法由安全规则强制执行或信任经过身份验证的用户(如高级游戏机制)。但是,即使您将Firebase(或任何数据库或服务)隐藏在服务器后面以防止访问,服务器仍然会有一个API,并且只要它在网络上,仍然面临着识别客户端来源的所有相同挑战。

匿名访问的另一种替代方法是使用自定义登录,这将允许服务器创建自己的 Firebase 访问令牌(用户不一定必须为此进行身份验证;令牌的签名完全取决于您)。这是有利的,因为如果匿名用户行为不端,则可以撤销访问令牌(通过在 Firebase 中存储一个值,安全规则使用该值来强制执行访问权限)。

更新

Firebase 现在在简单登录中内置了匿名身份验证,此处的常见用例无需使用自定义登录。