Lotta ad attività fraudolente e illecite

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 attendibile, 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 mitigare 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.

Impedire 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 dovrebbe 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 ritieni che l'acquisto sia legittimo, non sia stato utilizzato o elaborato in passato e l'utente superi tutti i controlli di idoneità e frode, puoi concedere in sicurezza i diritti per l'articolo o l'abbonamento in-app.
    • Controlli di idoneità e abusi:verifica che l'utente sia ancora idoneo per l'articolo. Se hai configurato il flusso di fatturazione con obfuscatedAccountId o obfuscatedProfileId, controlla che il mapping degli acquisti corrisponda all'account utente previsto nel tuo sistema. Esegui eventuali controlli aggiuntivi di abusi, rischi o sicurezza richiesti dal backend.
    • Rimborsi espliciti per acquisti illegittimi:se l'acquisto non supera i controlli di convalida o abusi, non concedere i diritti. Anziché lasciare che l'acquisto venga rimborsato automaticamente a causa della mancanza di conferma (che è ambigua perché può anche derivare da un timeout di elaborazione), rimborsa esplicitamente l'acquisto utilizzando l'endpoint Orders:refund (o un'API Play Developer simile) con il parametro revoke impostato su true. L'impostazione del parametro revoke garantisce la revoca dell'accesso in modo che l'utente non abbia più i diritti per l'acquisto e fornisce a Google Play un indicatore chiaro che l'acquisto è stato rifiutato dallo sviluppatore.
  • Per gli abbonamenti, quando linkedPurchaseToken è impostato in Purchases.subscriptionsv2:get, devi anche rimuovere il linkedPurchaseToken dal database e revocare i diritti concessi a linkedPurchaseToken per assicurarti che più utenti non abbiano i diritti per lo 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 dell'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 l'app, le API lato server forniscono una protezione aggiuntiva contro problemi come la scarsa connettività di rete e le attività dannose. Ad esempio, considera se un utente ha acquistato un articolo dalla tua app, ma ha 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 mancanza di 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 annullati automaticamente 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 un ordine 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, potresti 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 limitare l'attività dell'app e gli acquisti futuri finché il saldo della valuta non diventa positivo.

  • Implementazione di più avvertimenti:valuta la possibilità di intraprendere azioni meno drastiche per i trasgressori per la prima volta, ad esempio visualizzando avvisi in-app. Per i trasgressori recidivi, valuta misure più severe.

  • Disattivare temporaneamente gli acquisti:in modo simile all'implementazione di più avvertimenti, valuta la possibilità di disattivare gli acquisti per gli utenti con acquisti annullati finché non riesci a esaminare più attentamente il motivo dell'annullamento degli acquisti.

  • Disattivare temporaneamente o definitivamente l'accesso alla tua app:per i casi estremi con attività dannose ripetute, valuta la possibilità di disattivare 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 setObfuscatedAccountId e setObfuscatedProfileId metodi 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 per il copyright.