打擊詐欺與濫用行為

隨著您的應用程式日漸普及,可能會吸引不肖使用者的注目,意圖濫用您的應用程式。本主題將提供一些建議,可用於防範這類針對帳款服務整合的攻擊,並減輕濫用應用程式造成的影響。

將敏感邏輯移至後端

在應用程式設計允許的範圍內,將敏感資料和邏輯移至由您控制的後端伺服器。前端裝置上的資料與邏輯越多,被修改或竄改的機率就越高。

舉例來說,線上西洋棋遊戲應驗證後端中的所有動作,而非信任前端一定會傳送合法動作。

此外,如果您發現安全漏洞或安全性問題,視系統設計而定,在後端偵錯、修正及推出更新可能會更加容易 (與在前端進行相較)。

授權前先驗證購買交易

購買交易驗證和確認是特殊情況,應該在後端處理敏感資料和邏輯。使用者完成購買交易後,您應該執行以下作業:

  1. 將對應的 purchaseToken 傳送至後端。也就是說,您應為所有購買交易維護所有 purchaseToken 值的記錄。
  2. 確認目前購買交易的 purchaseToken 值沒有與先前的任何 purchaseToken 值重複。purchaseToken 具有全域唯一性,因此可以放心使用這個值做為資料庫中的主鍵。
  3. 使用 Google Play Developer API 中的 Purchases.products:getPurchases.subscriptionsv2:get 端點,向 Google 驗證購買交易是否符合規定。
  4. 如果應用程式內產品或訂閱項目購買交易合規,且從未使用過,就可以對交易項目授權。
  5. 如果是訂閱項目,在 Purchases.subscriptionsv2:get 中設定 linkedPurchaseToken 時,請一併將 linkedPurchaseToken 從資料庫中移除並撤銷對 linkedPurchaseToken 的授權,確保不會針對同一筆購買交易向多位使用者授權。
  6. 只有在購買狀態為 PURCHASED 時才可授權,並務必正確處理 PENDING 購買交易。如果 CANCELED 的購買交易激增,可以在購買交易仍處於 PENDING 狀態時授權。詳情請參閱處理未完成的交易
  7. 如果想在授權後消耗及確認消耗性產品,請在安全的後端伺服器上使用 Purchases.products:consume Play Developer API。如要確認非消耗性產品或訂閱項目,請在安全的後端伺服器上呼叫相關的 Play Developer API 端點,即 Purchases.products:acknowledgePurchases.subscriptions:acknowledge。確認為必要動作,因為這可通知 Google Play,使用者已取得購買交易的授權。您應在授權後立即確認購買交易。

    請注意,雖然可以透過應用程式在用戶端確認或消耗購買交易,但伺服器端 API 可為網路連線不佳和惡意活動等問題提供額外的防護措施。舉例來說,假設使用者已從應用程式購買商品,但在購買交易驗證期間發生網路連線中斷情形。如果未經伺服器確認,使用者可能就需要透過應用程式重新登入,才能完成確認程序。否則,如果使用者未在三天內重新登入,購買交易會因為未經確認而自動退款。伺服器確認程序可以防止發生這種情況,因為這項程序會在 Google Play 通知伺服器這筆有效購買交易後,立即傳送確認訊息。

    如要進一步瞭解如何確認及消耗購買交易,請參閱「處理購買交易」。

保護已解鎖的內容

為了防止不肖使用者重新發行您已解鎖的內容,請勿將這類內容隨附在 APK 檔案中。建議改用下列方法:

  • 使用即時服務提供內容,例如內容資訊提供。透過即時服務來傳送內容也能確保持續更新內容。
  • 透過遠端伺服器來傳送內容。

如果透過遠端伺服器或即時服務來提供內容,可以將已解鎖內容儲存在裝置記憶體或裝置的 SD 卡上。如果將內容儲存在 SD 卡上,請務必使用裝置專用加密金鑰對內容進行加密。

偵測並處理無效交易

「作廢的購買交易」是指已取消、已撤銷或已退費的購買交易。如果這類購買交易先前已將應用程式內商品或其他內容授權給使用者,可以使用 Voided Purchases API 取得購買交易作廢的原因,以及任何可收回的相關內容。

作廢應用程式內產品和訂閱項目購買交易的原因有很多,包括:

  • 由使用者、開發人員或 Google 取消購買交易。請注意,如果是訂閱項目,這是指取消訂閱項目的「購買交易」,而非取消訂閱項目本身
  • 購買交易遭到拒付。
  • 應用程式開發人員取消使用者訂單或退款,並在主控台選中「撤銷」選項。

您可以根據購買交易作廢的原因,並考量使用者過往的行為資料,決定要採取何種行動。建議實作下列一或多項動作:

  • 執行收回作業:購買交易作廢時,可以將未使用的商品收回,視同從未出售的商品。舉例來說,如果購買遊戲代幣的交易已作廢,您可以收回已授權給使用者的遊戲代幣。如果使用者已用完遊戲代幣,建議將代幣餘額設為負值,並限制應用程式活動和日後的購買交易,直到代幣餘額變為正值為止。
  • 多次發出警告:可以考慮針對初犯採取比較溫和的動作,例如顯示應用程式內警告。針對累犯,請考慮採用更嚴厲的措施。
  • 暫時停用購買功能:與多次發出警告的方式類似,建議針對有作廢購買交易的使用者停用購買功能,直到您能徹底調查出這些購買交易作廢的原因為止。
  • 暫時或永久禁止存取應用程式:如果遇到有人屢次從事惡意活動的極端情況,建議暫時或永久禁止該使用者存取應用程式。
  • 經常呼叫 Voided Purchases API:偵測到一或多筆作廢的購買交易時,建議提高對 Voided Purchases API 的呼叫頻率,在使用者能消耗購買交易前先行收回商品。如要進一步瞭解 Voided Purchases API 配額,請參閱 Voided Purchases API 說明文件

協助 Google 事先偵測詐欺行為

不肖使用者會建立多個 Google 帳戶和應用程式內帳戶來隱藏自己的活動,藉此從事某些類型的詐欺行為。

只要將建構工具中的 setObfuscatedAccountIdsetObfuscatedProfileId 方法用於 BillingFlowParams,即可協助 Google 將 Google 帳戶對應至應用程式內帳戶。

Google 會運用這類資料偵測可疑行為,並在某些類型的詐欺交易完成前,先行封鎖這些交易。

針對商標和版權侵害採取行動

如果您使用遠端伺服器提供或管理內容,請設定應用程式在使用者每次存取已解鎖內容時,驗證這類內容的購買狀態。如此一來,您就能在必要時撤銷使用權,並減少發生盜版行為。如果您發現自己的內容在 Google Play 重新發行,請務必迅速果斷地採取行動。詳情請參閱版權說明中心的「版權常見問題」頁面。