首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Firestore安全地增加选票

用Firestore安全地增加选票
EN

Stack Overflow用户
提问于 2022-09-28 20:09:24
回答 3查看 51关注 0票数 1

我读了很多关于这方面的文章,但没有找到一个适当的建议,官方的方式来确保选票的统计。

我们如何确保安全;

  1. FieldValue.increment(1)让恶意用户不能增加5,6等等?
  2. 如果我们检查userID(针对ex;postID/like/userID),那么检查它是否不存在有多确定呢?
  3. 请您展示一下创建基本用户喜欢/投票安全结构示例的建议的正确方法吗?

对于云功能的建议,只运行一个类似的或任何类型的投票的云函数真的实用吗?

谢谢,

EN

回答 3

Stack Overflow用户

发布于 2022-09-28 20:17:58

FieldValue.increment(1)让恶意用户不能增加5,6等等?

您可以比较安全规则中的当前值和新值,如下所示:

代码语言:javascript
复制
allow update: if request.resource.data.fieldName == resource.data.fieldName + 1;

从文档中,request.resource变量包含文档的未来状态,而resource.data是当前值。

然而,并不阻止用户多次使用increment(1)。您必须将用户的UID存储在某个地方来检查。

如果我们检查userID(针对ex;postID/like/userID),那么检查它是否不存在有多确定呢?

您可以使用exists()函数检查用户是否已经投票,但必须确保首先添加文档。用户可以增加计数,但阻止添加其投票记录的create操作符,从而允许他们进行多次投票。

解决方法之一是只添加投票文档,而不是增加计数,但随后您必须读取所有文档才能获得总票数,或者使用用于云函数的Firestore触发器在后台更新计数。

请您展示一下创建基本用户喜欢/投票安全结构示例的建议的正确方法吗?

当使用云函数时,可以确保计数会增加,用户的投票记录也会被添加,没有人可以反向工程代码。

票数 2
EN

Stack Overflow用户

发布于 2022-10-05 09:24:34

您可以从客户端执行所有这些操作,并使用规则,不需要云函数。

  • 客户端:使用的批处理
    1. 投赞成票
    2. 将用户uid添加到某个列表中。

  • 规则:
    1. 验证投票是否正确(例如,按照前一个答复中的建议,只增加1)
    2. 验证用户的uid在投票表决列表中尚未出现,但在使用!existsexistsAfter后是否存在。
票数 0
EN

Stack Overflow用户

发布于 2022-10-05 10:07:27

或者您可以使用Firebase函数为您完成任务。

这些是服务器端代码(这里是防火墙),所以没有人可以修改它.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73887255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档