隨著您的應用越來越受歡迎,它也會引起惡意用戶的注意,他們可能會濫用您的應用。本主題介紹了一些建議,您應該利用這些建議幫助防止這些針對結(jié)算服務集成的攻擊,并減少濫用行為對您的應用的影響。
將敏感邏輯移至后端
在應用設計允許的范圍內(nèi),盡可能將敏感數(shù)據(jù)和邏輯移至您控制的后端服務器。前端設備中的數(shù)據(jù)和邏輯越多,就越容易遭到修改或篡改。
例如,在線國際象棋游戲應該在后端驗證每一步,而不是相信前端發(fā)送的每一步始終都是合法的。
此外,如果發(fā)現(xiàn)了漏洞或安全問題,根據(jù)您的系統(tǒng)設計,在后端而非前端進行調(diào)試、修復和發(fā)布更新可能也會更容易。
在授予權(quán)限前驗證購買交易
應該在后端處理敏感數(shù)據(jù)和邏輯的一種特殊情況是購買交易驗證。用戶完成購買交易后,您應該執(zhí)行以下操作:
將相應的purchaseToken發(fā)送到后端。也就是說,您應維護一份所有購買交易的所有purchaseToken值記錄。
驗證當前購買交易的purchaseToken值是否與以前的任何purchaseToken值都不匹配。purchaseToken具有全局唯一性,因此您可以放心地使用此值作為數(shù)據(jù)庫中的主鍵。
使用Google Play Developer API中的Purchases.products:get或Purchases.subscriptions:get端點向Google驗證購買交易是否合法。
如果購買交易合法且過去沒有使用過,那么您就可以放心地授予對應用內(nèi)商品或訂閱的權(quán)限。
對于訂閱,在Purchases.subscriptions:get中設置linkedPurchaseToken時,您還應從數(shù)據(jù)庫中移除linkedPurchaseToken并撤消授予linkedPurchaseToken的權(quán)限,以確保不會因同一購買交易而向多個用戶授予權(quán)限。
注意:請勿使用orderId檢查是否存在重復的購買交易或?qū)⑵渥鳛閿?shù)據(jù)庫中的主鍵,因為不能保證所有購買交易都會生成orderId。特別是,使用促銷代碼完成的購買交易不會生成orderId。
保護未鎖定內(nèi)容
為防止惡意用戶重新分發(fā)您未鎖定的內(nèi)容,請勿將這種內(nèi)容放入您的APK文件中,而是執(zhí)行以下操作之一:
使用實時服務發(fā)送內(nèi)容,例如內(nèi)容Feed。通過實時服務發(fā)送內(nèi)容還可以使內(nèi)容始終保持最新狀態(tài)。
使用遠程服務器發(fā)送內(nèi)容。
通過遠程服務器或?qū)崟r服務發(fā)送內(nèi)容時,您可以將未鎖定內(nèi)容存儲在設備內(nèi)存中或設備的SD卡上。如果將內(nèi)容存儲在SD卡上,請務必加密內(nèi)容并使用設備專用加密密鑰。
檢測并處理作廢的購買交易
作廢的購買交易是指已經(jīng)取消、撤消或退款的購買交易。如果作廢的購買交易此前已向用戶授予應用內(nèi)商品或其他內(nèi)容,您可以使用Voided Purchases API獲悉購買交易作廢的原因并獲得您可以收回的任何關聯(lián)內(nèi)容。
注意:如果作廢的購買交易沒有任何與之關聯(lián)的可收回內(nèi)容,Voided Purchases API不會公開此類購買交易。
購買應用內(nèi)商品和訂閱的交易可能出于各種原因而作廢,其中包括:
用戶、開發(fā)者或Google取消購買交易。請注意,對于訂閱,這是指取消購買訂閱的交易,而不是取消訂閱本身。
購買交易被退款。
應用開發(fā)者取消用戶訂單或退款,并在控制臺中選中“撤消”選項。
您可以根據(jù)購買交易作廢的原因并考慮用戶以前的行為數(shù)據(jù)來決定相應的操作。我們建議您執(zhí)行以下一項或多項操作:
執(zhí)行收回商品操作:如果購買交易作廢,您可以收回未使用的商品,視同其從未出售過。例如,如果游戲幣購買交易作廢,您可以收回已經(jīng)授予用戶的游戲幣。如果用戶已經(jīng)花掉了游戲幣,可以考慮將游戲幣余額設置為負數(shù),并限制應用活動和未來的購買交易,直到游戲幣余額為正數(shù)。
實施多次警示:可以考慮對初犯者采取比較溫和的措施,比如顯示應用內(nèi)警告。對于屢犯者,應考慮采取更嚴厲的措施。
暫時禁止購買:與實施多次警示類似,您也可以考慮在您能夠更徹底地調(diào)查購買交易作廢的原因之前,禁止購買交易曾經(jīng)作廢的用戶進行購買。
暫時或永久禁止訪問您的應用:對于屢次實施惡意活動的極端情況,應考慮暫時或永久禁止對方訪問您的應用。
頻繁調(diào)用Voided Purchases API:當您檢測到一筆或多筆作廢的購買交易時,可以考慮更頻繁地調(diào)用Voided Purchases API,以便在用戶使用前收回所購商品。如需了解有關Voided Purchaisse API配額的更多信息,請參閱Voided Purchases API文檔。
幫助Google在欺詐發(fā)生前及時發(fā)現(xiàn)欺詐行為
實施某些類型的欺詐行為的惡意用戶會創(chuàng)建多個Google帳號和應用內(nèi)帳號來隱藏他們的活動。
將builder中的setObfuscatedAccountId和setObfuscatedProfileId方法用于BillingFlowParams可幫助Google將Google帳號映射到應用內(nèi)帳號。
Google會使用這些數(shù)據(jù)檢測可疑行為,并在某些類型的欺詐性交易完成之前及時加以阻止。
針對商標和版權(quán)侵犯采取行動
如果您使用遠程服務器發(fā)送或管理內(nèi)容,請確保當用戶訪問內(nèi)容時,應用能夠驗證未鎖定內(nèi)容的購買狀態(tài)。這樣,您就可以根據(jù)需要撤消使用權(quán),并最大限度地減少盜版。如果您看到自己的內(nèi)容在Google Play上被重新分發(fā),請務必迅速、果斷地采取行動。如需了解更多詳情,請參閱版權(quán)幫助中心內(nèi)的版權(quán)常見問題解答頁面。