Android在應用購買文檔中說要驗證服務器上的購買,而不是在設備上購買,因爲否則攻擊者可能會反編譯該應用並自動驗證購買。那麼,如何在服務器上進行驗證呢?我將用僞代碼來說明。以下是設備驗證方案1。爲什麼要在服務器上驗證Play商店購買?
public boolean verify(data){ return Security.verifyPurchase(data); }
攻擊者替換此:
public boolean verify(data){ return true; }
方案2,驗證服務器上:
:public boolean verify(data) { return verify("https://verify.server.com",data); }
攻擊者使用此替代
public boolean verify(data){ return true; }
所以唯一的方法是,如果購買的產品也是從服務器提供的,對吧?如果它正在解鎖某個功能,則必須從服務器上下載該功能所無法解決的問題,否則攻擊者只能反編譯並驗證購買(或反編譯並打開功能,跳過購買)。
原因是因爲您的僞代碼並不完全是購買驗證流程的工作原理。讓我們暫時考慮用戶名/密碼認證 - 爲什麼黑客不會像在您的示例中那樣將驗證用戶的代碼更改爲「true」?通常情況下,這是因爲沒有驗證函數返回一個布爾值 - 通常服務器實際上是在驗證後返回購買內容等數據。這些數據不會存儲在設備上,黑客無法訪問它。試試看這裏作爲一個例子:https://oauth.net/articles/authentication/ –
那麼這就是我說的 - 如果所有的服務器確實是驗證購買,這是行不通的。服務器還必須返回客戶需要的東西,以便將購買的商品提供給用戶。如果您購買的產品不適合自己,那麼您將不得不通過某種方式讓它以這種方式工作。我只是確保我正確理解這一點,並且我不會錯過任何東西。 – nasch
我更新了我的評論。如果您不熟悉OAuth,請查看OAuth。它提供瞭如何工作的很好的細節。 –