Combater fraude e abuso

O Google Play se dedica a garantir a segurança de usuários e desenvolvedores. Entendemos que a criação de uma empresa de apps bem-sucedida depende de uma plataforma confiável, que proteja seu retorno do investimento defendendo proativamente contra agentes maliciosos.

Este documento descreve recomendações para evitar ataques à integração de faturamento e diminuir o impacto de abusos no app.

Melhorar suas proteções

As APIs e ferramentas a seguir podem reduzir os riscos no app:

  • API Voided Purchases: revogue o acesso a pedidos anulados.
  • **ID de conta ofuscado**: ajuda a detectar quando vários dispositivos fazem compras na mesma conta em um curto período.
  • Consumo de back-end: ferramentas como Purchases.products:consume transferem a lógica de negócios para seus back-ends seguros, evitando adulterações no lado do cliente. Além de usar essas APIs da plataforma, adote as práticas recomendadas a seguir para proteger ainda mais suas integrações contra acesso não autorizado.

Evitar spoofing de localização

O Google Play oferece proteções integradas para impedir que agentes maliciosos usem locais falsos para explorar diferenças regionais de moeda (também conhecido como spoofing de localização), abusar de promoções e incentivos de assinatura e tentar golpes com cartões-presente.

Mover lógicas confidenciais para o back-end

Mova as lógicas e dados sensíveis para um servidor de back-end controlado por você, conforme permitido pelo design do seu app. Quanto mais dados e lógicas você tiver em um dispositivo de front-end, mais vulnerável seu app será a modificações ou adulterações.

Por exemplo, um jogo de xadrez on-line precisa validar todos os movimentos no back-end, em vez de confiar que o front-end sempre envia movimentos legais.

Além disso, se você encontrar vulnerabilidades ou problemas de segurança, dependendo do design do sistema, será mais fácil depurar, corrigir e implantar atualizações no back-end que no front-end.

Verificar compras antes de conceder titularidade

A verificação e confirmação de compras é um caso especial de lógica e dados sensíveis que precisa ser processado no back-end. Depois que o usuário realiza uma compra, você precisa fazer o seguinte:

  • Enviar o purchaseToken correspondente ao back-end. Isso significa que você precisa manter um registro de todos os valores de purchaseToken para todas as compras.
  • Verifique se o valor de purchaseToken da compra atual não corresponde a nenhum valor de purchaseToken anterior. purchaseToken é globalmente exclusivo. Assim, esse valor pode ser usado como a chave primária do seu banco de dados com segurança.
  • Use os endpoints Purchases.products:get ou Purchases.subscriptionsv2:get na API Google Play Developer para validar com o Google se a compra é legítima.
  • Se a compra for legítima e não tiver sido usada no passado, você poderá conceder o direito de acesso ao item no app ou à assinatura com segurança.
  • Para assinaturas, quando linkedPurchaseToken for configurado em Purchases.subscriptionsv2:get, também será necessário remover o linkedPurchaseToken do banco de dados e revogar a titularidade concedida ao linkedPurchaseToken para garantir que usuários diferentes não recebam titularidade sobre a mesma compra.
  • Conceder o direito apenas quando o estado de compra for PURCHASED e garantir que as compras PENDING sejam processadas corretamente. Se houver um pico de compras CANCELED, talvez você esteja concedendo direitos quando a compra ainda está no estado PENDING. Saiba mais em Como processar transações pendentes.
  • Depois de conceder o direito, se você quiser consumir e confirmar um produto de consumo, será necessário usar a API Purchases.products:consume Play Developer no seu servidor de back-end seguro. Para confirmar uma assinatura ou um produto que não é de consumo, chame o endpoint da API Play Developer relevante, Purchases.products:acknowledge ou Purchases.subscriptions:acknowledge, no seu servidor de back-end seguro. A confirmação é necessária, já que notifica o Google Play de que o usuário tem direito à compra. Confirme a compra imediatamente após conceder o direito.

    Embora seja possível reconhecer ou efetivar a compra no lado do cliente pelo seu app, as APIs do lado do servidor oferecem proteção extra contra problemas como conectividade de rede ruim e atividades mal-intencionadas. Por exemplo, imagine que um usuário comprou um item no seu app, mas perdeu a conectividade enquanto a compra estava sendo validada. Sem a confirmação do servidor, ele pode precisar fazer login de novo pelo app para concluir o processo de confirmação. Se o usuário não fizer login em até três dias, a compra será reembolsada automaticamente devido à falta de confirmação. A confirmação do servidor evita esse cenário enviando uma confirmação assim que o Google Play notifica o servidor de que a compra é válida.

Para saber mais sobre confirmação e consumo de compras, consulte Como processar compras.

Como proteger conteúdo desbloqueado

Para evitar que usuários maliciosos redistribuam seu conteúdo desbloqueado, não o empacote no arquivo APK. Em vez disso, escolha uma das opções a seguir:

  • Usar um serviço em tempo real para fornecer conteúdo, como um feed de conteúdo. Oferecer conteúdo por um serviço em tempo real também permite manter o conteúdo atualizado.
  • Usar um servidor remoto para exibir o conteúdo. Ao fornecer o conteúdo a partir de um servidor remoto ou um serviço em tempo real, é possível armazenar o conteúdo desbloqueado na memória ou no cartão SD do dispositivo. Ao armazenar conteúdo em um cartão SD, criptografe-o e use uma chave de criptografia específica do dispositivo.

Detectar e processar compras anuladas

Compras anuladas são compras que foram canceladas, revogadas ou estornadas. Caso uma compra anulada já tenha concedido itens no aplicativo ou outros conteúdos ao usuário, é possível usar a API Voided Purchases para encontrar o motivo para a anulação da compra e qualquer conteúdo associado que possa ser recuperado.

As compras de itens no aplicativo e de assinaturas podem ser anuladas por vários motivos, incluindo:

  • A compra foi cancelada pelo usuário, pelo desenvolvedor ou pelo Google (incluindo compras não confirmadas canceladas automaticamente). Para assinaturas, note que isso se refere ao cancelamento da compra de uma assinatura, e não ao cancelamento da assinatura em si.
  • A compra foi estornada.
  • O desenvolvedor de apps cancela ou reembolsa um pedido do usuário e seleciona a opção “revogar” no console. Com base no motivo para a anulação da compra e considerando os dados de comportamentos anteriores do usuário, é possível escolher uma solução. Recomendamos a implementação de uma ou mais das seguintes opções:

  • Recuperar itens:quando uma compra é anulada, é possível recuperar os itens que não foram usados como se eles nunca tivessem sido comprados. Por exemplo, se uma compra de moeda do jogo for anulada, é possível recuperar as moedas que já foram concedidas ao usuário. Caso o usuário já tenha usado as moedas, considere deixar o saldo de moedas negativo e limitar a atividade no app e compras futuras até que o saldo esteja positivo.

  • Implementar vários avisos:considere tomar medidas menos drásticas para as primeiras infrações, como exibir avisos no aplicativo. Considere medidas mais severas para infrações reincidentes.

  • Desative as compras temporariamente: de forma semelhante aos vários avisos, considere desativar a opção de compras para usuários com compras anuladas até que seja possível investigar o motivo para a anulação das compras em mais detalhes.

  • Bloquear o acesso ao app de forma temporária ou permanente:em casos extremos de atividades mal-intencionadas reincidentes, considere bloquear o acesso ao app, seja de forma temporária ou permanente.

  • Chamar a API Voided Purchases com frequência:quando detectar uma ou mais compras anuladas, considere chamar a API Voided Purchases com mais frequência para recuperar aquilo que foi comprado antes que seja usado pelo usuário. Veja mais informações sobre as cotas da API na documentação da API Voided Purchases.

    Ajudar o Google a detectar fraudes antes que elas aconteçam

Alguns tipos de fraude são relacionados a usuários mal-intencionados que criam várias contas do Google e no aplicativo para ocultar atividades.

Use os métodos setObfuscatedAccountId e setObfuscatedProfileId no builder para BillingFlowParams para ajudar o Google a mapear Contas do Google e contas em aplicativos.

O Google usa esses dados para detectar comportamentos suspeitos e bloquear alguns tipos de transações fraudulentas antes que elas sejam concluídas.

Como realizar ações contra violações de direitos autorais ou marcas registradas

Se você estiver usando um servidor remoto para fornecer ou gerenciar conteúdo, habilite seu app para verificar o estado de compra do conteúdo desbloqueado sempre que um usuário acessar o conteúdo. Isso permite revogar o uso quando necessário e minimizar a pirataria. Caso veja seu conteúdo sendo redistribuído no Google Play, aja de forma rápida e decisiva. Para saber mais, consulte a página Perguntas frequentes sobre direitos autorais na Central de Ajuda de direitos autorais.