Swift:Firebase:如何确保除了我的应用程序之外没有人可以访问我的数据库

Posted

技术标签:

【中文标题】Swift:Firebase:如何确保除了我的应用程序之外没有人可以访问我的数据库【英文标题】:Swift: Firebase: How to ensure no one can access my db except my app 【发布时间】:2016-10-23 06:40:03 【问题描述】:

我的 Swift ios 应用仅使用 Firebase 匿名登录。我担心我的 Firebase 数据库的安全性,因为显然任何人都可以访问或删除我的数据(通过浏览器等?)。

如何保护我的数据库,以便只有我的 iOS 应用可以访问它?

我原以为 Firebase 仪表板允许生成一个 API 密钥,我可以将它嵌入到我的应用中,但事实并非如此。

【问题讨论】:

如果您的应用程序直接与数据库通信,那么某人捕获/分析该通信并完全绕过您的应用程序并直接与数据库通信将是微不足道的。你基本上需要实现一个做接口的网络服务。所以它会是 appwebservicedb,而不是 any_who_wants_todb 实际上,如果没有保护任何人的 firebase 数据库,访问它是非常容易的。您所需要的只是他们的 firebase 应用程序的 url,通常很容易猜到。然后你可以直接向它发出读写命令。 【参考方案1】:

You need to write security rules.

任何人都可以看到您的网址,但安全规则是您规定有权访问哪些数据的方式。

这些规则就像你的数据结构上的注释,并指定必须满足哪些约束才能允许读取或写入。

假设您想保护您的数据库,以便只有经过身份验证的用户才能访问该数据库。这些是实时数据库的默认规则。


   "rules": 
     ".read": "auth != null",
     ".write": "auth != null"
   

auth 变量是一个服务器端值,用于存储当前经过身份验证的用户。该规则检查该变量是否具有值并因此包含登录用户。

我原以为 Firebase 仪表板允许生成一个 我可以在我的应用程序中嵌入的 API 密钥,但这似乎不是 案例。

Firebase 控制台将为您提供一个密钥,无论规则如何,您都可以完全访问。但是如果你把它嵌入到你的应用程序中,那么它就不再安全了。这就是您使用身份验证的原因,因为这会针对特定登录用户的该密钥创建令牌。

【讨论】:

正如我在问题中特别写的,我没有用户登录,因此基于用户的安全性不是一个选项。 您的应用程序使用匿名登录,这些人是具有uids 的用户,适用于这些规则。您可以将这些规则用于客户端使用 uid 创建的任何内容,它不必是 "users" 节点。 我明白了,如何修改您的代码,以便任何 uid 都可以访问所有数据?

以上是关于Swift:Firebase:如何确保除了我的应用程序之外没有人可以访问我的数据库的主要内容,如果未能解决你的问题,请参考以下文章

Firebase.google.com iOS 中的 Firebase 动态链接(Swift)

如何使用 Swift 在 Firebase 中创建具有多个属性的用户?

Swift:如何在实例化 viewController 之前加载 Firebase 数据?

Swift:为用户搜索 Firebase 数据库

无法将 Firebase 导入 Swift 类

在 swift Xctest 中测试 Firebase 类