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