【问题标题】:How to prevent to exposing business logic when using firebase?使用firebase时如何防止暴露业务逻辑?
【发布时间】:2019-11-01 16:32:46
【问题描述】:

我知道所有的 APK 都可以被反编译和逆向工程。其实我这样做是为了学习。

所以当我使用 firebase 云存储和 firebase firestore 时。它应该作为 SDK 包含在我的 android 项目中,这意味着所有使用 firebase 的代码都可能被公开。

使用 firestore 的每个查询都会被公开,否则我使用 REST API(如 firebase 云函数)然后这是不可能的。

我错过了什么吗?

【问题讨论】:

  • 我建议你使用firebase安全规则和firebase云功能来完成敏感任务。
  • @AlifHasnain firebase 安全规则似乎只是某种类似于防火墙的 ACL,因此它不能保护源代码。
  • 不可能保护您的代码免受逆向工程的影响。你所能做的就是使用 proguard 来让你的代码很难逆向工程。
  • @AlifHasnain 那么谁使用 firebase 作为移动后端?为什么?我真的很困惑。
  • 您的代码可以暴露并不意味着firebase不安全。正如我所说,借助 Firebase 安全规则,您可以定义谁可以访问哪些数据,还可以使用 Firebase 云功能运行敏感查询或其他敏感操作。不要在您的客户端代码中做一些可用于获取敏感数据的事情。

标签: android firebase


【解决方案1】:

使用 Firebase 的应用程序中的业务逻辑通常分布在以下位置:

  1. 在您的应用程序代码中。
  2. 在您的服务器端代码中。
  3. 在您的安全规则中。

您的大部分逻辑都应该在应用程序代码中。我强烈建议您将其作为默认选择:将功能直接添加到您的应用程序中。

如果您的代码机密或使用机密,请将其移动到受信任的环境中,例如您的开发机器(您经常使用它来给您团队的用户帐户一个自定义声明使他们成为管理员)、您已经控制的服务器或 Cloud Functions。在最后两种情况下,您通常会以某种方式从您的应用程序中调用该服务器端代码,因此您需要考虑如何保护访问,以便只有授权用户才能运行它(例如,您的团队成员是 auth 帐户有管理员声明)。

您将看到业务逻辑的最后一个位置是您的安全规则。规则中的业务逻辑和服务器端代码之间经常存在分歧,但您经常会看到您正在将客户端中的业务逻辑也重建到服务器中,或者作为服务器端代码,作为安全规则,或两者的结合。

【讨论】:

    【解决方案2】:

    您可以将 Firebase Cloud Functions 用于您认为敏感且不应在客户端(Android 应用)编写的业务逻辑。为了使逆向工程更加困难,您还可以从此处的 Android 文档中查看混淆您的 android 应用程序Shrink, obfuscate, and optimize your app

    混淆会缩短类和成员的名称,使任何反编译您的 apk 的人都难以对其进行逆向工程。例如,当您尝试浏览库的源代码(例如 FirebaseAuth)时,方法名称和变量名称已被替换为 zza、zzb 等

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-02
      • 2012-03-01
      • 2021-06-01
      • 1970-01-01
      • 2023-01-26
      • 1970-01-01
      • 2019-03-21
      相关资源
      最近更新 更多