我已经阅读了Firebase,看起来我想要做的事情很棒。 我已经阅读了有关身份验证以及如何根据规则确定某些登录用户有权执行不同的操作。好的。
但是,我不确定其他类型的安全性:如何确保仅我自己的网站(使用客户端javascript)可以与我的firebase-backend通信?我问,因为afaik没有办法阻止任何人从客户端代码(指向我特定的firebase后端的url)查找我的firebase端点并开始使用它,因为上帝知道什么。
在我想要打开匿名用户角色的写入的情况下,这尤其令人担忧。 (例如:某些分析可能)
任何有助于清除我的想法的人都非常感激。
答案 0 :(得分:15)
在我看来,这不是一个关于Firebase安全性的问题,而是对今天互联网架构的一般性讨论。由于网络是一个开放的平台,因此您无法阻止任何人访问网址(包括您的Firebase),因为您可以阻止某人在现实世界中驾车经过您的房屋。如果可以的话,访客仍然会对原产地撒谎,也无法阻止它。
使用身份验证保护您的数据。使用Forge中的授权域来阻止CSRF。放置security rules以防止用户做他们不应该做的事情。大多数数据写入您将使用服务器来防止可以单独使用安全规则来完成。
这实际上是Firebase和API服务的一个更好的品质。客户端完全隔离,因此可以轻松更换或扩展。只要您能证明自己被允许进入并遵守规则,您来自的地方就不重要了。
关于匿名访问,如果你只能让他们访问你的网站,那仍然不会阻止恶意写入(我可以打开我的JavaScript调试器并在你的网站上写多次)。相反,对匿名用户可写入的数据的格式,内容和长度设置严格的安全规则,或者节省一些时间并找到现有服务来为您处理分析,例如无处不在的Google Analytics。
当然,您可以像使用任何数据存储一样使用服务器作为中介。这对于某些高级逻辑非常有用,这些逻辑不能由安全规则强制执行或者对经过身份验证的用户信任(如高级游戏机制)。但即使您将Firebase(或任何数据库或服务)隐藏在服务器后面以防止访问,服务器仍将拥有API,并且仍然面临识别客户端起源的所有相同挑战,只要它在网络上即可。
匿名访问的另一种替代方法是使用custom login,这将允许服务器创建自己的Firebase访问令牌(用户不必为此进行身份验证;令牌的签名完全正常给你)。这是有利的,因为如果匿名用户行为不当,则可以撤销访问令牌(安全规则使用by storing a value in Firebase来强制访问)。
<强>更新强>
Firebase现在已经内置anonymous authentication进行简单登录,无需在此处使用自定义登录功能。