关于提现如何防止用户恶意调用接口的疑问 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
sanyuedev
V2EX    程序员

关于提现如何防止用户恶意调用接口的疑问

  sanyuedev 2023 年 6 月 12 日 3176 次点击
这是一个创建于 1032 天前的主题,其中的信息可能已经有所发展或是发生改变。

用户发起提现申请的时候,要去判断用户时间段内已申请的次数和提现成功的总金额

  1. 检查用户是否完善手机号
  2. 检查用户时间段内提现的次数
  3. 检查用户时间段内提现成功的金额+正在申请中的金额
  4. 冻结用户余额
  5. 新增提现申请
  6. 提现审核自动通过 /手动通过

这边存在的一个疑问就是如何防止用户恶意的调用两次接口,导致数据出异常。

冻结余额和更新提现状态,我使用的 乐观锁的更新方式。应该没什么问题。这边异常的点在于,检查时间段内次数和总金额,我是使用了快照读,这样用户连续请求就有可能导致判断出错,产生多的记录。其他人给出的方案有,直接使用 Redis 分布式锁,对用户提现这个操作进行加锁,这样是可以解决问题,但是这不就又变成了悲观锁了嘛。

想知道还有没有其他的方案。

13 条回复    2023-06-12 11:41:15 +08:00
hhjswf
    1
hhjswf  
   2023 年 6 月 12 日
幂等
tanjnr
    2
tanjnr  
   2023 年 6 月 12 日 via iPhone
提现这种非高频的,敏感业务,加个人工审核,用户随便调接口,用户端直接返回处理状态[提交成功,审核中,处理中 …]。后台人工审核通过才生效。
gimp
    3
gimp  
   2023 年 6 月 12 日
Redis 还是要上的,首先客户端可以传一个 once code ,如果 code 相同,说明是一个请求两次提交(客户端未限制连点或接口重放攻击)则丢弃请求,Redis 缓存 code 的时间可以设置几百毫秒或一两秒,这个值需要大于接口处理的时间。用 Reds 加锁让单个用户提现请求变为顺序的,另外前端也需要增加一些动效,增加用户点击提现的间隔,给数据库同步数据一点儿时间,按说是可以解决你的问题的。
bjzhush
    4
bjzhush  
   2023 年 6 月 12 日
入队列,确保一个前后顺序
LeegoYih
    5
LeegoYih  
   2023 年 6 月 12 日
锁也是锁个人的,有什么影响
huiyadanli
    6
huiyadanli  
   2023 年 6 月 12 日
分布式锁(悲观锁)是最佳方案,如果你觉的用户体验不佳可以加入自旋等待(自旋锁),获取锁失败则等待一会后重新获取,超时放弃并报错
R18
    7
R18  
   2023 年 6 月 12 日
悲观锁就悲观锁呗,反正试行锁,影响的也只有正在提现的这个人。这个人正在提现,他还想同时进行其他操作吗?
guaguaguaxia1
    8
guaguaguaxia1  
   2023 年 6 月 12 日
直接跟产品说,这种非高频的接口,一个用户 X 分钟内只能提交一次申请,不就解决了。这个时间可以是十分钟,半小时
christin
    9
christin  
   2023 年 6 月 12 日
once code 呢?没见你提到
Dream95
    10
Dream95  
   2023 年 6 月 12 日
乐观锁怎么用的,为什么会有错误数据
liuzhedash
    11
liuzhedash  
   2023 年 6 月 12 日
最简单,且实践过的方式:提现申请放到一个表里,加个定时任务挨个处理。
FlyToSKy
    12
FlyToSKy  
   2023 年 6 月 12 日
这种需求需要从业务方面进行限制就可以了,一是前端限制多久时间之内不允许再次提交,二是后端直接返回成功,显示提交成功,审核中。
hccsoul
    13
hccsoul  
   2023 年 6 月 12 日
是啊 提现 退款 这些 都是存在表里 然后定时任务 每隔几分钟扫描然后执行 。
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4824 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 32ms UTC 01:07 PVG 09:07 LAX 18:07 JFK 21:07
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86