打擊詐欺與濫用行為

隨著您的應用程式日漸普及,也可能會吸引不肖人士濫用應用程式。本主題將提供一些您應該採用的建議,以協助防範針對帳單整合的這類攻擊,並減少濫用應用程式造成的風險。

將敏感邏輯移至後端

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

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

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

在授權前驗證購買交易

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

  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 帳戶和應用程式內帳戶來隱藏自己的活動,進而從事某些類型的詐欺行為。

如果將 builder 中的 setObfuscatedAccountIdsetObfuscatedProfileId 方法用於 BillingFlowParams,便可以協助 Google 將 Google 帳戶對應至應用程式內帳戶。

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

針對商標侵權和版權侵權行為採取相關行動

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