google支付被刷問題及服務端訂單驗證解決方案

最近在google play上線的應用內支付被人刷了,用戶模擬發起了大量的支付請求,並且全部成功支付。搞得我最近茶飯不思。。今天總算是解決了,和大家分享一下。

我們客戶端的支付實現步驟是:

1. app端調用google支付

2. 支付成功後,調用 自己服務器的發貨接口,當然發貨接口是做了簽名校驗的。

之所以在app端調用發貨,是因爲google貌似沒有提供服務器端直接回調url的地方,所以纔給了惡意用戶模擬google返回的機會。

 

一開始我以爲是我們自己的發貨接口密鑰被破解了,但是後來經過app上報,發現客戶端是真實的走過了所有的google支付流程,即google的支付sdk真的返回了成功。

由於不清楚是因爲google的密鑰泄漏還是攻擊者用別的方法實現,所以客戶端這邊已經沒有辦法確認是安全的了。

好在google是提供了查詢訂單的接口的: http://developer.android.com/google/play/billing/gp-purchase-status-api.html

實現的流程在文檔中已經寫的很清楚了,我這裏就不贅述了。

判斷的方法也很簡單:

1. 判斷是否購買成功

2. 判斷返回 developerPayload 是否與傳入的值一致。最好傳入訂單號,以防止重放攻擊。

發佈了54 篇原創文章 · 獲贊 22 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章