蘋果支付的這些漏洞,你都堵上了嗎?

支付流程

首先讓咱們理一下蘋果支付的整個流程。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.退款漏洞

攻擊流程:

  • 用戶支付了錢
  • 商家發了貨給用戶
  • 用戶要求蘋果退款
  • 蘋果沒有諮詢商家是否能退款,就直接退款了,退款後也不會通知商家。
  • 最終的結果是:用戶不用花錢,商家發了貨。

做爲商家,這個漏洞也沒有什麼辦法防止。

最後

雖然蘋果是世界一流的廠商,可是蘋果支付的安全性比微信和支付寶都差不少。
若是商家在開發時沒有注意到這些漏洞,就很容易被攻擊。並且這是涉及金錢的功能,被攻擊的後果每每很嚴重。

未經容許,請不要轉載

相關文章
相關標籤/搜索