【问题标题】:Firebase Firestore with Android Frontend. Design question: Security relavant code on frontend?Firebase Firestore 与 Android 前端。设计问题:前端的安全相关代码?
【发布时间】:2022-01-03 10:58:13
【问题描述】:

假设我们有一个带有 Firebase 后端的银行应用。我们可以看到我们当前的余额,我们可以添加一笔交易。

现在从编码的角度来看:

如果我们添加一笔交易,我们需要调整账户余额。由于这与安全相关(我们不希望有人操纵前端和调整账户余额),我们只添加交易并让后端(firebase 云功能)执行它。

但现在账户余额(用户界面)将无响应,直到后端添加交易并将其同步到前端,从而导致糟糕的用户体验。

预期行为:添加的交易直接反映到帐户余额。

如何解决这个问题?

我有很多想法:

  1. 让前端执行事务(感觉很糟糕)
  2. 在前端和后端执行它,前端只写入缓存,后端确认或覆盖缓存结果(感觉不错,但是如何只写入缓存而不是同步?)
  3. 处理表示层上的可见数据,直到后端覆盖/确认(与 2 相同,但在表示层上执行此操作的方式相同)

注意:我不认为这是一个基于意见的问题。我认为有做这些事情的标准方法,因此我认为这个问题是合法的。

任何帮助表示赞赏

编辑:它实际上不是一个银行应用程序。这是一个演示问题的简单示例。目标应用程序需要的安全性远低于银行应用程序,但问题仍然存在

【问题讨论】:

  • 很抱歉,但在我决定将 Firebase 用于银行应用程序之后,我认为与安全性有关的一切都无关紧要。
  • 它不是银行应用程序。我只需要一个简单易懂的例子。
  • 嘿@Avinta,这个问题现在解决了吗?
  • 不,给出的答案只是它现在如何工作的实现。我的问题是后端和前端之间的时间差(我立即看到了事务,因为它是由前端添加到 firebase 的,但我没有立即看到(需要等待几秒钟)结果。所以用户可能会明白程序被破坏并重新添加交易(坚持银行示例)
  • 你能分享你得到的代码和错误吗?

标签: android firebase google-cloud-firestore google-cloud-functions


【解决方案1】:

直接使用 firebase 作为“后端”的问题是,有时很难separate responsibilities between front and back,从而导致安全问题。

最重要的一点是你绝不能只信任你的用户输入,并且有明确的层隔离,实现这一点的一种方法是使用cloud functions 处理你的事务,这样你就只能从你的客户端代码中读取数据(也添加一些安全性,因此您 100% 没有远程客户端正在更改数据),并通过函数运行事务。

【讨论】:

  • 这正是现在正在发生的事情。我有一个处理后端用户输入的云功能。唯一的问题是,更改不会直接反映在 UI 中以供用户查看,因为云功能需要时间来启动和应用更改。但我希望用户立即看到更改(因为这是他所期望的。所以我的想法是在前端(用户数据)也进行更改,并在后端完成后覆盖
  • 这真的取决于您需要的实际安全性,另一种选择是拥有两组数据,一组用于您的前端数据,另一组用于实际业务信息,然后当前端更改,您可以使用触发器来验证 fe trx,然后如果它通过您的所有业务规则,则将其记录在实际的“后端”上,最后重要的部分是 fe 不会对数据直接
猜你喜欢
  • 2017-07-05
  • 2020-06-12
  • 1970-01-01
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 2020-09-12
  • 2019-01-06
  • 2021-02-26
相关资源
最近更新 更多