标签:系统 权限 黑产 支付 数据 没有 异步 安全性 页面
首先让我们理一下苹果支付的整个流程。
支付有三个角色
苹果支付的流程
苹果没有提供接口来获取收据对应的订单号
所以利用这个漏洞,攻击者可以使用订单A的收据来验证订单B,最终实现花较少的钱来获取较贵的货物。
攻击流程:
解决方法:
在验证收据的接口,可以获取收据对应的货品号。在验证收据的同时,要验证货品号和订单对应的货品号是否一致。
当然这种解决方法还是有漏洞的,例如用户A和用户B购买了同样的货品,然后用户A支付了,获取到收据A,这时候如果用户B可以获取到收据A,就可以盗用收据A来实现系统为自己的订单发货。
但是这种情况是较难实现的,因为用户B要获取到用户A的收据,需要获取用户A的手机权限或者中间人权限,然后还要攻破https的加密
验证收据的接口只会返回收据是否合法,不会返回收据的验证次数。
所以利用这个漏洞,攻击者可以只支付一个订单,然后重复使用收据来实现刷多个订单。
攻击流程:
解决方法:
验证收据时,需要查看该收据是否已经使用过。实现方法是验证收据成功时,把收据保存到数据库,下次验证的时候检查下数据库是否已经存在该收据。
这里还要注意并发问题。例如同时2个请求过来,分别验证订单A和B,然后都使用同一个收据A,这时候数据库是没有收据A记录的,最终订单AB都会验证成功。可以使用加锁,数据库唯一键,或者redis原子性来避免。
验证收据的接口有可能会超时。超时并不代表成功或者失败。所以对于超时的收据,需要使用异步或者定时任务来重新验证。不然会导致用户成果支付后,却没有发货成功。
苹果有个功能,新用户首次支付,在40元以下的商品,苹果会首先通知商家发货,然后再去银行卡扣钱。很多黑产会利用这个漏洞来刷钱。
也就是苹果通知了商家发货,然后后面去银卡扣钱失败了,到月底和商家结算的时候,苹果说我没有收到钱,所以钱也不结算给商家。最后的损失还是商家来承担。(感觉好无赖,明明是你的漏洞,后果要我来承担)
作为商家,这个漏洞没有什么办法防止。
攻击流程:
作为商家,这个漏洞也没有什么办法防止。
虽然苹果是世界一流的厂商,但是苹果支付的安全性比微信和支付宝都差很多。
如果商家在开发时没有注意到这些漏洞,就很容易被攻击。而且这是涉及金钱的功能,被攻击的后果往往很严重。
未经允许,请不要转载
标签:系统 权限 黑产 支付 数据 没有 异步 安全性 页面
原文地址:https://www.cnblogs.com/Xjng/p/11703434.html