【问题标题】:Implementing an increment(+1) filed security using security rules使用安全规则实现递增 (+1) 归档安全
【发布时间】:2023-02-05 10:43:41
【问题描述】:

我希望能够保护我的增量逻辑不被前端滥用 我当前的前端代码

 // Initial Payload
const surfacePayload: SurfacePayload = {
        gender: selected.gender,
        unit: unit.current,
         // will increment the count in db by +1
        count: increment(+1),
        src: currentUser?.uid!,
     };
await setDoc(doc(db, docRef, surfacePayload);

我的安全规则逻辑如下:

// requestData.count types 
request.resource.data.count is number && // if the incoming count is a number
request.resource.data.count <= 12 && // this field cannot exceed 12 

然而,我最担心的是这个计数器被设置为在相关子集合中创建文档的保护器,并且继续发送 0 或 1 真的很容易没有真正检查传入数据是否仅(增量 +1)添加到文档中计数的当前状态...是否有任何其他检查我可以实施以使其坚如磐石,我尝试仅使用(resource.data)再次检查当前状态但由于此检查是一部分一张更大的支票,它被链接起来,所以它失败了..

【问题讨论】:

  • 您可以检查传入值(request.resource.data.count)是否为确切地比现有值 (resource.data.count) 多 1。有关更多信息,请参阅链接的答案。即request.resource.data.count == resource.data.count + 1;
  • @Dharmaraj 问题是该集合无法从一开始就退出 ..... 所以没有办法查看 src .. 有什么想法吗?

标签: google-cloud-firestore firebase-security


【解决方案1】:

对于您的文档可能不存在的情况,您可以为createupdate编写单独的规则,如下所示:

allow create: if request.resource.data.count == 1; // default value 1
allow update: if request.resource.data.count == resource.data.count + 1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-19
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    • 2019-07-05
    • 2016-06-27
    • 1970-01-01
    相关资源
    最近更新 更多