苹果支付的这些漏洞,你都堵上了吗?

支付流程

首先让咱们理一下苹果支付的整个流程。redis

支付有三个角色数据库

  • 苹果
  • 商家,也就是咱们
  • 用户

苹果支付的流程后端

  1. 用户下单
  2. 客户端调用后台接口,生成订单
  3. 客户端调用支付页面,用户支付
  4. 支付成功后,客户端获取收据
  5. 客户端把收据发给后端
  6. 后端去苹果验证收据是否合法
  7. 若是合法,就发货

漏洞

1.收据不能和订单号关联

苹果没有提供接口来获取收据对应的订单号
因此利用这个漏洞,攻击者可使用订单A的收据来验证订单B,最终实现花较少的钱来获取较贵的货物。安全

攻击流程:微信

  1. 用户生成订单A(价格1元),订单B(价格100元)
  2. 用户支付订单A,获得收据A
  3. 用户使用收据A去要求后端发货订单B
  4. 最终用户收到订单B的货物,可是只支付了订单A的钱

解决方法:
在验证收据的接口,能够获取收据对应的货品号。在验证收据的同时,要验证货品号和订单对应的货品号是否一致。并发

固然这种解决方法仍是有漏洞的,例如用户A和用户B购买了一样的货品,而后用户A支付了,获取到收据A,这时候若是用户B能够获取到收据A,就能够盗用收据A来实现系统为本身的订单发货。
可是这种状况是较难实现的,由于用户B要获取到用户A的收据,须要获取用户A的手机权限或者中间人权限,而后还要攻破https的加密异步

2.收据能够重复验证

验证收据的接口只会返回收据是否合法,不会返回收据的验证次数。
因此利用这个漏洞,攻击者能够只支付一个订单,而后重复使用收据来实现刷多个订单。
攻击流程:加密

  1. 用户生成订单A,支付,获取收据A
  2. 用户生成订单B,使用收据A来验证订单B

解决方法:
验证收据时,须要查看该收据是否已经使用过。实现方法是验证收据成功时,把收据保存到数据库,下次验证的时候检查下数据库是否已经存在该收据。
这里还要注意并发问题。例如同时2个请求过来,分别验证订单A和B,而后都使用同一个收据A,这时候数据库是没有收据A记录的,最终订单AB都会验证成功。可使用加锁,数据库惟一键,或者redis原子性来避免。接口

3.收据验证超时

验证收据的接口有可能会超时。超时并不表明成功或者失败。因此对于超时的收据,须要使用异步或者定时任务来从新验证。否则会致使用户成果支付后,却没有发货成功。支付宝

4.36元漏洞

苹果有个功能,新用户首次支付,在40元如下的商品,苹果会首先通知商家发货,而后再去银行卡扣钱。不少黑产会利用这个漏洞来刷钱。
也就是苹果通知了商家发货,而后后面去银卡扣钱失败了,到月底和商家结算的时候,苹果说我没有收到钱,因此钱也不结算给商家。最后的损失仍是商家来承担。(感受好无赖,明明是你的漏洞,后果要我来承担)
做为商家,这个漏洞没有什么办法防止。

5.退款漏洞

攻击流程:

  • 用户支付了钱
  • 商家发了货给用户
  • 用户要求苹果退款
  • 苹果没有咨询商家是否能退款,就直接退款了,退款后也不会通知商家。
  • 最终的结果是:用户不用花钱,商家发了货。

做为商家,这个漏洞也没有什么办法防止。

最后

虽然苹果是世界一流的厂商,可是苹果支付的安全性比微信和支付宝都差不少。
若是商家在开发时没有注意到这些漏洞,就很容易被攻击。并且这是涉及金钱的功能,被攻击的后果每每很严重。

未经容许,请不要转载

相关文章
相关标签/搜索