iOS應用內支付的那些坑

來源:互聯網
上載者:User

    轉載自:http://www.leiphone.com/iap-traps.html

   

我們在今年春節後上線了新的線上智能題庫:猿題庫。猿題庫現在推出了公務員考試行測和申論2個產品,均包括web, iOS和Android三個平台。這次我們嘗試做一個收費的產品,所以在iOS端整合了應用內支付(IAP)功能。在開發過程中和上線後,我們遇到了IAP中的一些坑,在此分享給各位。

IAP 審核相關的坑

IAP開發的詳細步驟我寫在另一篇部落格中了。在此主要介紹審核時遇到的問題。

IAP類型錯誤

由於我們是月付型的產品,所以在設定IAP類型時,我沒有經驗,只是簡單設定成了可重複消費(Consumable)的IAP項目。但是我不知道,蘋果對於這種按時間收費的產品,應該使用不可更新的定閱(Non-Renewing Subscription)類型。這個類型設定錯誤造成了我們app的一次審核被拒。

IAP驗證邏輯

由於蘋果在iOS5.0以下有IAP的bug,使得攻擊者可以偽造支付成功的憑證。而iOS6.0的系統在越獄後同樣可以偽造憑證,所以我們對於應用內支付,增加了伺服器端的驗證。伺服器端會將支付憑證發給蘋果的伺服器進行二次驗證,以保證憑證是真實有效。

在我們公司的測試伺服器中,我們會串連蘋果的測試伺服器(https://sandbox.itunes.apple.com/verifyReceipt)驗證。

在我們部署線上上的正式伺服器中,我們會串連蘋果的正式伺服器(https://buy.itunes.apple.com/verifyReceipt )驗證。

我們提交給蘋果審核的是正式版,我們以為蘋果審核時,我們應該串連蘋果的線上驗證伺服器來驗證購買憑證。結果我理解錯了,蘋果在審核App時,只會在sandbox環境購買,其產生的購買憑證,也只能串連蘋果的測實驗證伺服器。但是審核的app又是串連的我們的線上伺服器。所以我們這邊的伺服器無法驗證通過IAP購買,造成我們app的又一次審核被拒。

解決方案是判斷蘋果正式驗證伺服器的返回code,如果是21007,則再一次串連測試伺服器進行驗證即可。蘋果的這一篇文檔上有對返回的code的詳細說明。

IAP上線後的遇到的情況

我們在伺服器端增加了驗證IAP是否有效邏輯。在產品上線後,如我們所料,我們收到了大量的欺騙性購買,這些都被我們的伺服器識別出來了,但是我們也遇到了以下這次沒有想到的情況:

1、由於國內越獄使用者的比例比較大(大概為50%),所以雖然我們伺服器會驗證購買憑證,但是每天有超過50%以上的憑證都是偽造的。同時由於蘋果的驗證伺服器在美國,憑證驗證請求響應的時間比較慢,大量的偽造憑證發給蘋果伺服器,不知道會不會被蘋果認為我們是在惡意進行DDOS。至少我們發現有些時候,驗證請求會逾時。

2、由於國內有許多小白使用者,他們的手機從購買時就被渠道商幫忙越獄過了並且安裝了IAP free外掛程式。所以對於這類使用者,他們即使想付費購買,由於系統原有的IAP支付功能已經被破壞,所以他們是無法正常付費的。麻煩的是,他們會以為這是我們的app的問題,轉而給我們的客服打電話投訴。這讓我們非常鬱悶。

3、蘋果的驗證伺服器有時候會出問題,我們發現本來約定好返回的JSON資料在有幾次返回的居然是一個XML格式的檔案。造成我們將正常的付費IAP憑證驗證失敗。所以,在伺服器記錄下所有的驗證憑證非常有必要,一來可以防止駭客多次提交同一個成功憑證的重放攻擊,二來在需要時可以手工進行再驗證。

越獄手機可能被駭客竊取購買憑證!

我們發現有一部分使用者反饋說已經收到蘋果的計費賬單,但是我們從伺服器的驗證記錄看,他上傳的憑證卻是虛假的。由於這些使用者不太多,我們一開始以為是使用者在惡意欺騙我們,後來我們讓他將蘋果的付費賬單郵件轉寄給我們,以及將itunes的購買記錄轉寄給我們,我們越來越懷疑這裡面有一個黑色的產業鏈。越獄手機的正常購買憑證可能被駭客的惡意程式截獲,具體的攻擊方式我們討論了一下,其實就是被中間人攻擊,詳細的過程如下:

1.越獄手機的在被破解後,可能從一些破解渠道安裝了駭客的惡意程式。

2.駭客將越獄手機所有https請求都經過他的中間伺服器。

3.當有支付請求時,駭客先將請求發給蘋果伺服器,待蘋果將成功的憑證返回後,駭客將這個憑證替換成假的憑證,完全支付憑證的偷取。

或許有人會問,這個憑證拿來有什麼用呢?很簡單 ,因為蘋果為了保護使用者的隱私,支付憑證中並不包含任何使用者的apple id資訊,所以我們的app和伺服器無法知道這個憑證是誰買的,而只能知道這個憑證是真的還是假的。於是駭客就可以用這個憑證,在另外的帳號中通知我們完成了購買,而發來的驗證憑證又是真實的,所以我們的伺服器就會誤認為是駭客的帳號完成了購買,繼而把會員期算在駭客的帳號上。

再舉一個簡單的例子,你拿500塊錢買了順風優選的500元購物券,由於這個購物券是不記名的,所以順風優選無法知道是誰買的。如果這個購物券在發放過程中被人掉包,那麼偷購物券的人就可以拿這個偷來的真購物券來購物,而順風優選的卡因為是不記名的,所以也無法查證這件事情。在這個例子中,購物券的不記名和蘋果的支付憑證無帳號資訊是同一個道理。

鑒於以上情況,考慮到越獄手機不但不能成功支付,還會有安全問題,所以我們在新版中取消了越獄手機中的IAP支付功能。

所以,請大家還是不要越獄自己的手機,iphone手機越獄後風險相當大。實在不值得為了免費玩幾個遊戲就丟掉安全性。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.