Segurança e projeto

Já que você desenvolveu sua implementação de faturamento no aplicativo, certifique-se de seguir as orientações de segurança e projeto abordadas neste documento. Essas orientações são práticas recomendadas para todos que usam o serviço de faturamento no aplicativo do Google Play.

Práticas recomendadas de segurança

Realize tarefas de verificação de assinatura em um servidor

Se for prático, você deve realizar a verificação de assinatura em um servidor remoto, e não em um dispositivo. Implementar o processo de verificação em um servidor dificulta a ruptura do processo de verificação com engenharia reversa do seu arquivo .apk por parte dos invasores. Se você realmente descarrega o processamento de segurança em um servidor remoto, certifique-se de que o aperto de mão entre dispositivo e servidor seja seguro.

Proteja seu conteúdo não bloqueado

Para evitar que usuários maliciosos redistribuam seu conteúdo não bloqueado, não o incorpore ao 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. Fornecer conteúdo por meio de um serviço em tempo real permite manter o conteúdo atualizado.
  • Usar um servidor remoto para fornecer 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 não bloqueado na memória ou no cartão SD do dispositivo. Ao armazenar conteúdo em um cartão SD, certifique-se de criptografá-lo e usar uma chave de criptografia específica do dispositivo.

Ofusque o código

Você deve ofuscar seu código de faturamento no aplicativo para dificultar o uso de engenharia reversa em protocolos de segurança e outros componentes do aplicativo por parte de invasores. No mínimo, recomendamos executar uma ferramenta de ofuscação, como o Proguard, no código.

Além disso, para executar um programa de ofuscação, recomendamos usar as seguintes técnicas para ofuscar o código de faturamento no aplicativo.

  • Alinhar métodos a outros métodos.
  • Construir strings dinamicamente em vez de defini-las como constantes.
  • Usar reflexão Java para chamar métodos.

Essas técnicas podem ajudar a reduzir a superfície de ataque do seu aplicativo e a minimizar ataques que comprometam a implementação do faturamento no aplicativo.

Observação: Se você usar o Proguard para ofuscar seu código, adicione a linha a seguir no arquivo de configuração do Proguard:

-keep class com.android.vending.billing.**

Modifique todos os exemplos de código do aplicativo

O exemplo de aplicativo com faturamento no aplicativo é distribuído publicamente e qualquer um pode baixá-lo, o que significa que é relativamente fácil usar engenharia reversa no seu aplicativo se você usar o exemplo de código exatamente igual ao publicado. O objetivo do exemplo de aplicativo é ser apenas isso: um exemplo. Ao usar qualquer parte do exemplo do aplicativo, você deve modificá-la antes de publicar ou lançar como parte de um aplicativo em produção.

Em especial, os invasores buscam pontos de entrada e de saída conhecidos em um aplicativo, por isso é importante modificar as partes do código idênticas às do exemplo de aplicativo.

Use valores de uso único aleatórios e protegidos

Os valores de uso único não devem ser previsíveis nem reutilizados. Sempre use um gerador de número aleatório seguro criptograficamente (como o SecureRandom) ao gerar valores de uso único. Isso pode ajudar a reduzir a ocorrência de ataques iguais.

Além disso, ao realizar uma verificação de valor de uso único em um servidor, não deixe de gerar os valores de uso único no servidor.

Defina a string de carga do desenvolvedor ao fazer solicitações de compra

Com a In-app Billing Version 3 API, é possível incluir um token de string de “carga do desenvolvedor” ao enviar a solicitação de compra ao Google Play. Normalmente usa-se isso para passar um token de string que identifica exclusivamente essa solicitação de compra. Se você especificar um valor de string, o Google Play retornará essa string com a resposta de compra. Em seguida, ao fazer consultas sobre essa compra, o Google Play retornará essa string junto com os detalhes da compra.

Você deve passar um token de string que ajude o aplicativo a identificar o usuário que fez a compra, assim você pode verificar mais tarde se essa foi uma compra legítima desse usuário. Para itens consumíveis, é possível usar uma string gerada aleatoriamente, mas para itens não consumíveis, você deve usar uma string que identifique o usuário exclusivamente.

Observação: Não use o endereço de e-mail do usuário na string de carga, já que esse endereço pode ser diferente.

Ao receber a resposta do Google Play, certifique-se de verificar se a string de carga do desenvolvedor corresponde ao token enviado anteriormente com a solicitação de compra. Como precaução adicional de segurança, você deve realizar a verificação no seu próprio servidor protegido.

Não faça vista grossa para violações de direitos autorais ou marcas registradas

Se você vir seu conteúdo sendo redistribuído no Google Play, aja rápida e decisivamente. Protocole uma notificação de violação de direito sobre marca registrada ou uma notificação de violação de direitos autorais.

Implemente um esquema de revogabilidade para o conteúdo não bloqueado

Se estiver usando um servidor remoto para fornecer ou gerenciar conteúdo, verifique o estado de compra do conteúdo não bloqueado do seu aplicativo sempre que um usuário acessar tal conteúdo. Isso permite revogar o uso quando necessário e minimizar a pirataria.

Proteja sua chave pública do Google Play

Para manter a chave pública segura contra usuários maliciosos e hackers, não a incorpore a nenhum código como uma string literal. Em vez disso, construa a string em tempo real do zero ou use manipulação de bit (por exemplo, XOR com alguma outra string) para esconder a chave real. A chave em si não é considerada informação secreta, mas não é aconselhável deixá-la facilmente acessível a hackers ou usuários mal-intencionados que possam substituir a chave pública por uma outra.