记一次苹果内购刷单bug修复

记一次苹果内购刷单bug修复

某一天,产品经理从后台的统计数据中发现苹果内购的销售额数量巨大,然后反馈给我,是不是代 码出现了bug

心里一慌,莫不是统计代码出现bug了,但是最近没有修改过代码,并且只是苹果内购出现了问 题,所以问题定位到苹果内购上面。去查数据库,果然发现内购订单数量暴涨,而且金额巨大。 接下来开始找问题产生的原因:

  1. 家里有矿的土豪们闲的发慌,充钱玩(心里偏向于这条原因)
  2. 网站被人植入了后门,直接向数据库中写订单数据
  3. 苹果内购支付验证有漏洞

开始排查原因 1. 查苹果App Store的销售记录,只能查看前一天的数据,先暂停一下,第二天接着查 2. 联想到前几天的云盾报告可疑的WebShell通信行为,凭直觉认为这个嫌疑很大,但是花费大 量时间也没在服务器中找到问题,瞬间觉得自己应该去买几本白帽子的书学习一下,暂时放 弃。换个思路,发现不只是数据库中有订单信息,相应的日志也一应俱全,所以客户应该是 走的正常支付流程,只是付款的时候出现了纰漏。定位到第3点 3. 上网一查,发现吐槽内购的有帖子很多,第3点的嫌疑又增大了一点,一看代码发现前辈们把 苹果服务器返回的status==0 就当成了支付成功,而没有验证product_idtransaction_id,导致越狱用户能够伪造receipt_data ,伪造的receipt_data 苹果校 验也返回支付成功。从日志文件中发现刷单用户的receipt_data 都是同一个数据,问题原 因基本锁定在第三点了。

内购订单验证

url : https://buy.itunes.apple.com/verifyReceipt

method : post

params : receipt-data