【问题标题】:Should I query my Firebase database directly, or use Cloud Functions我应该直接查询我的 Firebase 数据库,还是使用 Cloud Functions
【发布时间】:2022-01-08 16:27:18
【问题描述】:

目前我有一个用户集合,其中包含用户文档,每个用户都有一个 currentPoints 整数字段,可以通过单击按钮从应用程序内部更新

                                    transaction
                                    .update(couponCollectionReference, {
                                  'currentPoints':
                                      FieldValue.increment(10),
                                });

如果有人决定对我的应用程序进行逆向工程,他们是否可以将增量更改为 FieldValue.increment(1000),编译应用程序并像这样使用它?

我想知道我是否应该将云功能用于这些主要操作

【问题讨论】:

    标签: firebase flutter google-cloud-firestore


    【解决方案1】:

    事务旨在防止多个用户之间的竞争条件,但不是防止滥用的安全机制。

    您可以在可以为您的数据库编写的服务器端security rules 中捕获多种形式的滥用行为。我已经用它编写了安全投票系统,因此您的案件也可能通过规则得到保障。

    如果你search for the [google-cloud-firestore][firebase-security]标签组合,你会发现很多关于这个话题的问题。

    也就是说,许多不熟悉 Firebase 安全规则的开发人员更熟悉通过服务器端代码保护访问,这也很好。

    【讨论】:

    • 感谢您回复 Frank,所以如果我理解正确,我可以编辑我的安全规则,以便可以添加到 currentPoints 的唯一值是 10,如果还有什么要写的东西它会简单地拒绝吗?另外我想知道我是否在不同的集合中有一个布尔字段 isVisible 只能由用户读取,并且该字段决定应用程序内的小部件是否可见,用户是否可以更改将该值设置为 true 而不是 isVisible 所以小部件始终在他的屏幕上可见?
    • 安全规则无法控制屏幕上显示的内容。但是,如果您的应用程序代码读取是否需要从数据库中的固定位置显示该按钮(因此无需查询),那么您的安全规则确实可以强制相应的写入操作也只能在该条件下执行。我建议尝试此类操作,如果遇到困难,请回复minimal repro
    • 感谢您抽出时间来阐明我的这种担忧。我想我对安全性的了解还不够,以至于我担心有人更改我的代码并能够更改他们想要在 firebase 数据库中更改的任何内容
    • 这很正常,但我们不能为您带走。我建议阅读文档(12)观看这些视频(1234),并尝试建立自己的规则,然后打破它们。跨度>
    • 最重要的通常是从principle of least privilege开始:从一个完全锁定的数据库开始,然后只允许你的代码做什么。有关更多信息,请参阅我对这些问题的回答(12
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多