2023年12月,京东京东商城被曝出一个价格保护漏洞。商城用户下单后,漏洞如果在价保期内商品降价,京东可以申请退差价。商城但有人发现,漏洞把同一个订单里的京东商品拆开申请价保,系统会重复计算差价。商城简单说,漏洞买三件东西,京东分开申请三次,商城能拿到三份补偿。漏洞这个漏洞持续了大概两天,京东京东后来堵上了,商城但已经有人靠它薅了几万块。漏洞
我是在一个羊毛群里看到的消息。群主发了张截图,订单金额247元,价保退了189元,接近八折。底下有人回“已到账”,有人问“还能上车吗”。那种氛围像抢限时秒杀,没人觉得是在钻空子。一个群友私聊我,说他用五个账号操作,退了六千多。他原话是:“京东自己写的规则,我按规则走,有什么问题?”
漏洞的逻辑不复杂。京东价保系统判断降价时,是按订单维度比价。但拆单之后,每个子订单独立走一遍流程,系统没做去重校验。比如你买A、B、C三件商品,总价300。A降价20,B降价30,C降价10。正常价保退60。拆开申请,A退20,B退30,C退10,再合并申请一次总价降价60,总共退120。多出来的60就是漏洞白送的。
技术层面看,这是典型的业务逻辑缺陷。开发人员默认用户会按整单申请,没考虑拆单场景。测试环节大概率也没覆盖这种异常路径。京东的价保规则写得很细,什么品类支持、什么时间范围、什么条件触发,但规则越复杂,边界情况越多。拆单只是其中一个口子,还有用优惠券后比价、跨店满减分摊这些,都能算出不一样的差价。
我试了一次。买了两箱牛奶,原价128,下单用了张10元券,实付118。第二天牛奶降到108。申请价保,系统退了10块。然后我取消订单重新下单?不行,价保已经用过了。但换个思路,把牛奶和另一件商品凑单,再拆开申请,又能退一笔。我没继续,觉得麻烦,也怕账号被标记。但那些专业薅羊毛的,手里几十个账号,脚本自动跑,一天能刷几百单。
京东的反应算快。漏洞曝光第二天,价保入口就加了限制,同一订单只能申请一次,拆单不再重复计算。之前退的钱没追回,也没封号。这种处理方式很京东——宁可吃点亏,也不跟用户撕破脸。毕竟价保本来就是营销手段,退差价的钱早算进推广预算了。真正损失的不是那几万块,是系统被戳了个洞,面子上不好看。
这事让我想起拼多多的百亿补贴漏洞,还有淘宝的跨店满减bug。电商平台每年搞大促,规则复杂得像奥数题,技术团队连夜改代码,测试用例根本跑不完。上线之后,总有人能找到没覆盖的角落。有些是运气,有些是专业团队盯着。京东这个漏洞不算大,但足够典型——业务规则和技术实现之间的缝隙,永远比想象中宽。
后来那个羊毛群被封了。群主转战另一个平台,继续发线报。京东的价保规则改成了“同一用户同一商品仅可申请一次”,看起来更严了。但我知道,只要还有促销,就还会有漏洞。区别只是谁先发现,谁先堵上。普通用户薅个几十块,专业团队薅几万块,平台睁只眼闭只眼。这场猫鼠游戏,从来没停过。