全部
常见问题
产品动态
精选推荐

【重大生产BUG修复】新人优惠券被恶意高并发一次领取了20张,并且均可以正常使用。

管理 管理 编辑 删除

绕过条件竞争多次领取优惠卷,这种问题出现的原理是:多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。通常的web处理方式是通过单线程线性完成的,如果出现多线程并发请求的情况,数据处理逻辑就可能出现异常。

接口:/api/coupon/receive

45426202404151512161312.png29149202404151512262528.png

bd3c6202404151512367007.png876a3202404151512517454.pngef74e202404151513167392.png



修复建议:

   一般是使用mysql的锁机制、或者使用redis的原子性、单线程特性来解决。

   本次修复采用了限制接口请求频率的方案来解决,因为我们在遇到这个bug之前已经实现了限制接口频率的功能,另外急于工期,所以临时这样解决。最终还是计划使用redis来从根源解决这个问题。

   该问题可延伸出秒杀场景下的库存超卖、签到场景下的多次签到领取奖励等。大家可以测试排查下相关场景是否存在该问题。


修复方法:

   1:安装 composer安装 topthink/think-throttle 依赖;

       composer require topthink/think-throttle

       注意:执行composer 安装依赖命令的时候最好先git提交一下代码,或者备份一下, 因为依稀记得当时安装这个依赖的时候导致项目提交git的时候出现了一个关于git子模块的问题,当时排查出来是因为composer更新了一个名为alipaysdk/easysdk的依赖,这个依赖又依赖于xin/container这个,然而这个xin/container依赖文件夹内部有.git的文件夹,因为我对git子模块不太熟悉,所以当时git提交报错后,我直接将xin/container文件夹内的两个子目录里的.git删掉即可。


  2:对领取优惠券接口使用频率限制配置(也可以对任意想要限制频率的接口进行设置)

       61ccb202404151528223967.png

       说明:

       1. 对相关接口配置\think\middleware\Throttle中间件,1/10表示10秒内仅允许一个请求;

       2. key中一定要使用到用户的唯一uid;

       3. 另外就是这个中间件一定要放在认证中间件AuthTokenMiddleware后面,否则request中获取不到用户的uid信息。

   

请登录后查看

hmmmmmmmmmmmmmmmm 最后编辑于2024-04-15 15:35:03

快捷回复
回复({{post_count}}) {{!is_user ? '我的回复' :'全部回复'}}
回复从新到旧

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}}

作者 管理员 企业

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest==1? '取消推荐': '推荐'}}
{{item.floor}}#
{{item.user_info.title}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
{{item.like_count}}
{{item.showReply ? '取消回复' : '回复'}}
删除
回复
回复

{{itemc.user_info.nickname}}

{{itemc.user_name}}

作者 管理员 企业

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}   {{itemc.ip_address}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
回复
回复
查看更多
回复
回复
288
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

相关推荐

hmmmmmmmmmmmmmmmm 作者
欢迎大家向我反馈crmeb多店版的bug,这么优秀的产品,需要我们一起来维护完善它。微信:note744917

回答

87

发布

40

经验

2287

快速安全登录

使用微信扫码登录
{{item.label}} {{item.label}} {{item.label}} 板块推荐 常见问题 产品动态 精选推荐 首页头条 首页动态 首页推荐
加精
取 消 确 定
回复
回复
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定

微信登录/注册

切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
CRMEB客服

CRMEB咨询热线 咨询热线

400-8888-794

微信扫码咨询

CRMEB开源商城下载 开源下载 CRMEB官方论坛 帮助文档
返回顶部 返回顶部
CRMEB客服