在涉及到钱的问题时,多线程同步问题一定要重点考虑,如果处理不当可能造成无法预料的损失。
YS 电商优惠券漏洞可以使一张优惠券被多次使用来生成订单【高】
问题描述:
用户在YS电商可以使用我们提供的优惠券购买设备,并得到一定金额的优惠,一张优惠券只能使用一次,在提交生成订单的接口时需要带上该优惠券号码,后台系统会根据该优惠券的类型自动减少额度并最终生成订单,但该接口在后台未做并发同步处理,导致一张优惠券可以使用多次并最终生成多个用于支付的订单。
测试步骤:
1、 登录YS MALL,选择需要购买的设备CX(此处CX价格为880,优惠券优惠额度为300RMB),并进入购物车提交订单,如图所示:
2、 在订单信息中使用使用优惠券,如下图所示:
3、 提交订单并拦截生成订单请求,转入burp intruder,设置相关参数后,发起快速请求,可以看到有4个请求被成功处理,如图所示:
4、 转入“我的订单”页面,可以看到成功生成4个订单,并且每个订单都成功地使用了同一个优惠券,如下图所示:
5、 查看后台优惠券使用记录也验证了这一点,如图:
问题扩展:
理论上所有的接口都有可能出现此类问题,对于牵涉到敏感业务的接口可能会造成不可预料的后果。
解决建议:
1、 处理代码增加同步锁做并发同步处理。