Combater fraude e abuso

O Google Play se dedica a garantir a segurança de usuários e desenvolvedores. Sabemos que a criação de um negócio de apps bem-sucedido 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 seu 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, impedindo 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 de moeda regionais (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:

  • Envie 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 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 você acredita que a compra é legítima, não foi usada ou processada no passado e o usuário passa em todas as verificações de qualificação e fraude, você pode conceder a titularidade ao item no app ou à assinatura com segurança.
    • Verificações de qualificação e abuso:verifique se o usuário ainda está qualificado para o item. Se você configurou o fluxo de faturamento com obfuscatedAccountId ou obfuscatedProfileId, verifique se o mapeamento de compra corresponde à conta de usuário esperada no seu sistema. Realize outras verificações de abuso, risco ou segurança exigidas pelo back-end.
    • Reembolsos explícitos para compras ilegítimas:se a compra falhar na validação ou nas verificações de abuso, não conceda a titularidade. Em vez de deixar a compra ser reembolsada automaticamente devido à falta de confirmação (que é ambígua, já que também pode resultar de um tempo limite de processamento), reembolse explicitamente a compra usando o endpoint Orders:refund (ou uma API Play Developer semelhante) com o parâmetro revoke definido como true. A configuração do parâmetro revoke garante que o acesso seja revogado para que o usuário não tenha mais direito à compra e envia ao Google Play um sinal claro de que a compra foi rejeitada pelo desenvolvedor.
  • No caso de assinaturas, quando o linkedPurchaseToken for configurado em Purchases.subscriptionsv2:get, também será necessário remover o linkedPurchaseToken do banco de dados e revogar o direito concedido a ele para garantir que usuários diferentes não recebam direito 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 Play Developer Purchases.products:consume no seu servidor de back-end seguro. Para confirmar um produto que não é de consumo ou uma assinatura, chame o endpoint de API Play Developer relevante, either Purchases.products:acknowledge or 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. Você precisa confirmar a compra imediatamente após conceder o direito.

    Embora seja possível confirmar ou consumir 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 maliciosas. 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 do app cancelou ou reembolsou um pedido do usuário e selecionou a opção “revogar” no console. Com base no motivo para a anulação da compra e considerando os dados comportamentais anteriores do usuário, é possível escolher uma solução. Recomendamos implementar 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.

  • Implemente vários avisos:considere tomar medidas menos drásticas para as primeiras infrações, como exibir avisos no app. 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.

  • Bloqueie o acesso ao app temporária ou permanentemente:em casos extremos de atividades mal-intencionadas reincidentes, considere bloquear o acesso ao app temporária ou permanentemente.

  • 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 setObfuscatedAccountId e setObfuscatedProfileId métodos 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.