Executando verificação de segurança...
1

Firebase em aplicativos Mobile

Oi, pessoal.
Estou criando uma aplicação mobile que funcionará como marketplace. Entende-se que existirão diversos usuários, publicando produtos, lendo produtos de outros usuários, editando itens, etc.

Como o fluxo de operação de leitura e escrita é grande, entendo a necessidade de utilizar técnicas de caching no front-end pra minimizar o uso de recursos, já que o Firebase já oferece essa ferramenta.

No entanto, a maior problemática que vejo em usar o firebase para mobile é que as chaves API do projeto ficarão expostas no cliente porque já estão no bundle do app que é enviado ao cliente. Gostaria de saber se vocês tiveram experiências parecidas com o Firebase, e qual foi a solução que vocês encontraram.

No geral, entendo que eu conseguindo privar abusos do app, como alguém pegando as chaves API e gerando um simples servidor Node.js para fazer milhares de requisições no meu projeto, vai ser o suficiente pra fazer o app rodar efetivamente. E também, colocando as regras no Firestore para que apenas usuários autenticados tenham acesso aos recursos - o que ainda não impede da pessoa criar uma função para que ela se registre + logue e depois comece a realizar o abuso possuindo um token de autenticação já que o firebase não limita uso para usuário.

Até estou cogitando colocar um back-end simples com Node.js + Express para rodar por cima do Firebase, assim eu esconderia as chaves nesse projeto atrás do back-end próprio e configuraria até mais o retorno da cada endpoint. E, direto no aplicativo, apenas faria as chamadas nas rotas necessárias. Também não sei se essa seria a solução ideal, mas não queria perder as vantagens do Firebase no geral que já tem cache, solução real-time pro firestore, entre outras features.

Sei, por exemplo, da ferramente 'App Check' do Firebase, que provavelmente vai ser o que vou colocar pra limitar para que apenas meu App possua o Token válido pra rodar o projeto Firebase. Só que, ainda assim, possui um limite. Além disso, tentei restringir o uso das chaves API direto no Google Cloud Console, lá tem essa possibilidade, mas fazendo a limitação pro uso dessas chaves, o firestore continua retornando dados para fontes que não possuem a permissão, já o Firebase Authentication é o único que nega acesso realmente, e nega acesso errado ainda, porque mesmo dando acesso pra um cliente confiável, ele ainda nega o acesso.

Enfim, agradeço o suporte de quem tiver boas ideias para soluções pro meu caso.

Carregando publicação patrocinada...
2

Voce pode restringir o acesso as suas APIs do Firebase, configurando no console do Firebase o SHA1 do seu APP. Aqui tem um guia prático de como fazer.

Além disso, é interessante também injetar a API KEY no seu projeto na CI, evitando assim que você precise expor ela no repositório. Da pra fazer isso usando o Gradle e o Github Actions.

Usar ofuscadores como o Dexguard ou o R8 por exemplo também ajuda, mas não são uma solução definitiva.

1

Elias, obrigado pelo retorno.

Eu até mencionei no texto que fiz essa restrição das API's para usar apenas o SHA-1 do meu app Android e também o bundler do iOS, mas como eu mencionei não funcionou. Fazendo chamadas por uma fonte externa ele ainda permitia acesso ao firestore, por exemplo. Somente as chamadas à autenticação ficaram restritas (tanto para fonte externa quanto para meu app android que eu dei permissão também ficou restrito), ou seja, não funcionou :(

Vou procurar saber sobre Dexguard e o R8.

Você sabe me dizer se o App Check do firebase seria o suficiente para suprir essa segurança?