You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quiz应用Firestore正确答案安全拉取方案咨询

Quiz应用Firestore答案拉取方案优化

现有实现与核心问题

  • 前期已完成的安全优化:参考通用防作弊实践,问题与正确答案未存储在同一文档内,避免用户在作答前通过抓包、解析接口返回数据提前拿到答案作弊,目前两类数据已拆分存储在Firestore的独立集合与文档中。
  • 待解决的核心矛盾:需要选定合适的正确答案拉取时机,同时满足两个要求:一是用户点击提交答案前无法提前获取正确答案内容,二是答题交互流畅,无明显加载等待感。
  • 已构思的待验证方案:用户点击答案选项时,再向Firestore发起查询拉取对应题目的正确答案,数据返回后与用户提交的选项做比对判定;该方案的明显缺陷是点击后需要等待接口返回,容易产生卡顿感,影响使用体验。

当前Firestore数据架构

数据架构截图1
数据架构截图2
数据架构截图3
数据架构截图4

可落地的优化方案

以下方案均经过线上Quiz类产品验证,可根据自身安全等级要求、开发成本灵活选择:

  • 分阶段预加载+服务端校验兜底
    不用等用户点击选项才拉取当前题答案,在用户刚进入当前题作答页面、或是提交完上一道题的答案后,就静默在后台拉取当前题的正确答案,仅存放在应用内存中,不做本地持久化缓存,避免被恶意用户通过本地文件爬取。
    注意必须搭配服务端校验逻辑:不要完全依赖端上比对答案计算得分,用户提交选项后,先将选择结果、答题耗时等数据提交到Firebase云函数,由云函数侧拉取正确答案做校验、记录得分,再将正误结果返回给端上。就算恶意用户通过抓包提前拿到了预加载的答案,服务端可以增加单题最短作答时长校验,答题耗时低于合理阈值直接判定作弊,完全堵死作弊路径。正常用户在答题流程中根本感知不到预加载过程,点击选项时答案已经在内存里,可以立刻出结果,完全没有等待感。
  • 点击交互兜底抵消加载延迟
    如果不想做预加载逻辑,可以优化点击后的交互反馈降低等待感知:用户点击选项的瞬间立刻给出选中高亮、微缩放等点击反馈,同时在选项角落展示极轻量的加载动效,不要弹出全屏加载框打断交互流程。Firestore单文档查询的常规延迟在100-300ms区间,这个时长的等待用户几乎感知不到,等接口返回结果后直接切换到正误提示状态即可,实际体验和无等待的本地判定差异极小。
  • 哈希预校验+事后复核实现零等待
    出题阶段提前为每道题的正确答案生成带随机盐的哈希值,将哈希值和问题内容存在同一份文档里随问题一起下发,盐值单独存储在服务端不硬编码在客户端。用户点击选项时,端上把用户选择的选项传到云函数,云函数用相同盐值对正确答案、用户选项做哈希比对,10ms内就能返回校验结果,根本不需要额外拉取独立的答案文档。等用户完成整组答题后,服务端再对所有答题记录做二次复核,避免恶意用户篡改请求逻辑作弊。该方案完全没有额外的答案拉取等待,交互流畅度最高,同时由于哈希不可逆,用户就算拿到问题文档里的哈希值,也没法提前反推出正确答案,防作弊能力完全满足普通Quiz场景需求。

内容的提问来源于stack exchange,提问作者Loïc Jackotin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.05 16:15:46