Google Play si impegna a garantire la sicurezza sia per gli utenti sia per gli sviluppatori. Sappiamo che la creazione di un'attività di app fiorente si basa su una piattaforma affidabile, che protegga il tuo ritorno sull'investimento difendendosi in modo proattivo da soggetti malintenzionati.
Questo documento descrive i consigli per prevenire gli attacchi all'integrazione della fatturazione e ridurre l'impatto degli abusi nella tua app.
Migliorare le protezioni
Le seguenti API e i seguenti strumenti possono ridurre i rischi nella tua app:
- API Voided Purchases: revoca l'accesso agli ordini annullati.
- **ID account offuscato**: aiuta a rilevare quando più dispositivi effettuano acquisti sullo stesso account in un breve periodo.
- Consumo di backend: strumenti come Purchases.products:consume spostano la logica di business nei backend sicuri, impedendo la manomissione lato client. Oltre a utilizzare queste API della piattaforma, adotta le seguenti best practice per proteggere ulteriormente le tue integrazioni dall'accesso non autorizzato.
Prevenire lo spoofing della posizione
Google Play fornisce protezioni integrate per impedire ai soggetti malintenzionati di utilizzare posizioni false per sfruttare le differenze di valuta regionali (note anche come spoofing della posizione), abusare di promozioni e incentivi per gli abbonamenti e tentare truffe con le gift card.
Spostare la logica sensibile nel backend
Per quanto lo consenta la progettazione dell'app, sposta i dati e la logica sensibili su un server di backend che controlli. Più dati e logica hai in un dispositivo frontend, più è vulnerabile alla modifica o alla manomissione.
Ad esempio, un gioco di scacchi online deve convalidare tutte le mosse nel backend anziché presupporre che il frontend invii sempre mosse legali.
Inoltre, se trovi vulnerabilità o problemi di sicurezza, a seconda della progettazione del sistema, potrebbe essere più facile eseguire il debug, correggere e implementare gli aggiornamenti nel backend anziché nel frontend.
Verificare gli acquisti prima di concedere i diritti
Un caso speciale di dati sensibili e logica che deve essere gestito nel backend è la verifica degli acquisti e la conferma. Dopo che un utente ha effettuato un acquisto, devi:
- Inviare il purchaseToken corrispondente al backend. Ciò significa che devi mantenere un record di tutti i valori purchaseToken per tutti gli acquisti.
- Verificare che il valore purchaseToken per l'acquisto corrente non corrisponda a nessun valore purchaseToken precedente. purchaseToken è univoco a livello globale, quindi puoi utilizzare in sicurezza questo valore come chiave primaria nel database.
- Utilizzare gli endpoint Purchases.products:get o Purchases.subscriptionsv2:get nell' API Google Play Developer per verificare con Google che l'acquisto sia legittimo.
- Se l'acquisto è legittimo e non è stato utilizzato in passato, puoi concedere in sicurezza i diritti per l'articolo in-app o l'abbonamento.
- Per gli abbonamenti, quando linkedPurchaseToken è impostato in Purchases.subscriptionsv2:get, devi anche rimuovere linkedPurchaseToken dal database e revocare il diritto concesso a linkedPurchaseToken per assicurarti che più utenti non abbiano diritto allo stesso acquisto.
- Devi concedere i diritti solo quando lo stato dell'acquisto è PURCHASED e assicurarti di gestire correttamente gli acquisti PENDING. Se si verifica un picco di acquisti CANCELED, potresti concedere i diritti quando l'acquisto è ancora in stato PENDING. Per saperne di più, consulta Gestire le transazioni in attesa.
Dopo aver concesso i diritti, se vuoi consumare e confermare un prodotto consumabile, utilizza l' API Play Developer Purchases.products:consume sul server di backend sicuro. Per confermare un prodotto non consumabile o un abbonamento, chiama l'endpoint API Play Developer pertinente, either Purchases.products:acknowledge or Purchases.subscriptions:acknowledge sul server di backend sicuro. La conferma è obbligatoria, in quanto notifica a Google Play che all'utente sono stati concessi i diritti per l'acquisto. Devi confermare l'acquisto immediatamente dopo aver concesso i diritti.
Tieni presente che, sebbene tu possa confermare o consumare l'acquisto lato client tramite la tua app, le API lato server forniscono una protezione aggiuntiva contro problemi come la scarsa connettività di rete e le attività dannose. Ad esempio, supponiamo che un utente abbia acquistato un articolo dalla tua app, ma abbia perso la connettività di rete durante la convalida dell'acquisto. Senza la conferma del server, potrebbe essere necessario accedere di nuovo tramite l'app per completare la procedura di conferma. In caso contrario, se l'utente non accede di nuovo entro tre giorni, l'acquisto viene rimborsato automaticamente a causa della mancata conferma dell'acquisto. La conferma del server impedisce questo scenario inviando la conferma non appena Google Play notifica al server che l'acquisto è valido.
Per saperne di più sulla conferma e sul consumo degli acquisti, consulta Elaborare gli acquisti.
Proteggere i contenuti sbloccati
Per impedire agli utenti malintenzionati di ridistribuire i contenuti sbloccati, non raggrupparli nel file APK. Procedi invece in uno dei seguenti modi:
- Utilizza un servizio in tempo reale per pubblicare i contenuti, ad esempio un feed di contenuti. La pubblicazione di contenuti tramite un servizio in tempo reale ti consente anche di mantenerli aggiornati.
- Utilizza un server remoto per pubblicare i contenuti. Quando pubblichi contenuti da un server remoto o da un servizio in tempo reale, puoi memorizzare i contenuti sbloccati nella memoria del dispositivo o sulla scheda SD del dispositivo. Se memorizzi i contenuti su una scheda SD, assicurati di criptarli e di utilizzare una chiave di crittografia specifica del dispositivo.
Rilevare e gestire gli acquisti annullati
Gli acquisti annullati sono acquisti che sono stati annullati, revocati o stornati. Se un acquisto annullato aveva precedentemente concesso articoli in-app o altri contenuti a un utente, puoi utilizzare l'API Voided Purchases per ottenere il motivo dell'annullamento dell'acquisto insieme a tutti i contenuti associati che puoi recuperare.
Gli acquisti di articoli in-app e abbonamenti possono essere annullati per una serie di motivi, tra cui:
- Un acquisto viene annullato dall'utente, dallo sviluppatore o da Google (inclusi gli acquisti con annullamento automatico non confermati). Per gli abbonamenti, tieni presente che si tratta dell'annullamento dell'acquisto di un abbonamento, anziché dell'annullamento dell'abbonamento stesso.
- Un acquisto viene stornato.
Lo sviluppatore di app annulla o rimborsa l'ordine di un utente e seleziona l'opzione "Revoca" nella console. In base al motivo dell'annullamento dell'acquisto e tenendo conto dei dati comportamentali precedenti dell'utente, puoi decidere un piano d'azione. Ti consigliamo di implementare una o più delle seguenti opzioni:
Eseguire recuperi:quando un acquisto viene annullato, puoi recuperare gli articoli non utilizzati come se non fossero mai stati acquistati. Ad esempio, se l'acquisto di una valuta in-game è stato annullato, puoi recuperare la valuta già concessa all'utente. Nel caso in cui l'utente abbia già speso la valuta, valuta la possibilità di impostare il saldo della valuta su un valore negativo e di limitare l'attività dell'app e gli acquisti futuri finché il saldo della valuta non è positivo.
Implementazione di più avvisi:valuta la possibilità di intraprendere azioni meno drastiche per i trasgressori alla prima violazione, ad esempio la visualizzazione di avvisi in-app. Per i trasgressori recidivi, valuta misure più severe.
Disattivare temporaneamente gli acquisti:in modo simile all'implementazione di più avvisi, valuta la possibilità di disattivare gli acquisti per gli utenti con acquisti annullati finché non riesci a indagare più a fondo sul motivo dell'annullamento degli acquisti.
Vietare temporaneamente o definitivamente l'accesso alla tua app:per i casi estremi con attività dannose ripetute, valuta la possibilità di vietare l'accesso alla tua app, temporaneamente o definitivamente.
Effettuare chiamate frequenti all' API Voided Purchases:quando rilevi uno o più acquisti annullati, valuta la possibilità di effettuare chiamate più frequenti all'API Voided Purchases per recuperare gli acquisti prima che l'utente possa consumarli. Per saperne di più sulle quote dell'API Voided Purchases, consulta la documentazione dell'API Voided Purchases.
Aiutare Google a rilevare le frodi prima che si verifichino
Alcuni tipi di frode sono correlati a utenti malintenzionati che creano più account Google e in-app per nascondere la propria attività.
Utilizza i metodi setObfuscatedAccountId e setObfuscatedProfileId nel builder per BillingFlowParams per aiutare Google a mappare gli Account Google agli account in-app.
Google utilizza questi dati per rilevare comportamenti sospetti e bloccare alcuni tipi di transazioni fraudolente prima che vengano completate.
Intraprendere azioni contro le violazioni di marchi e copyright
Se utilizzi un server remoto per pubblicare o gestire i contenuti, fai in modo che la tua app verifichi lo stato dell'acquisto dei contenuti sbloccati ogni volta che un utente accede ai contenuti. In questo modo puoi revocare l'utilizzo quando necessario e ridurre al minimo la pirateria. Se noti che i tuoi contenuti vengono ridistribuiti su Google Play, agisci rapidamente e in modo deciso. Per maggiori dettagli, consulta la pagina Domande frequenti sul copyright nel Centro assistenza sul copyright.