Firebase como proteger dados numéricos da manipulação pelos usuários, por exemplo. pontuação do jogo

Estou desenvolvendo um jogo multiplayer com o Firebase. A pontuação do jogador é registrada no firebase após cada jogo, e também um campo playerTotalScore é atualizado com o novo total. Minha pergunta: É possível proteger o campo playerTotalScore contra manipulação arbitrária do usuário usando apenas regras de segurança do firebase? Se sim, como?

Examinei detalhadamente as informações de segurança do firebase no site do firebase. Embora eu entenda que é possível implementar alguma lógica complexa nas regras de segurança (aumente um número em um determinado valor como esteessência ou torne o campo somente inserção (".write": "!data.exists()" ), nenhuma das informações parece ajudar neste caso. Regras apenas de incremento não serão suficientes porque a pontuação pode ser manipulada sendo incrementada várias vezes. Somente inserção parece ser uma opção para o totalScore, porque isso é atualizado após cada jogo.

Atualizar

Conforme solicitado por Kato, aqui está o caso de uso específico.

O jogo que estou desenvolvendo é um jogo de perguntas em que os jogadores respondem a perguntas e a pontuação dos jogadores é exibida em tempo real.

Durante o decorrer do jogo, a pontuação desse jogo específico é atualizada após cada pergunta pela seguinte declaração:

gameRef.child('players').child(UserId).child('score').set(gameScore)

Após o término do jogo, o total de Pontuação (todos os jogos disputados) para o jogador é calculado comototalScore=totalScore+gameScore e a pontuação total dos jogadores é atualizada no Firebase usando a seguinte declaração:

leaderboardRef.child(userId).setWithPriority({userName:userName, totalScore:totalScore}, totalScore)
Update2: Estrutura de Dados conforme solicitado por Kato

Aqui está a estrutura específica que tenho atualmente. Como isso não está definido, estou aberto a alterá-lo de acordo com a abordagem recomendada para proteger os dados.

A pontuação para cada jogo jogado por um usuário (jogador) é armazenada na seguinte estrutura

<firebase_root>/app/games/<gameId>/players/<userId>/score/

<gameId> é a chave gerada pelo firebase como um resultado da chamada do método push () do firebase.<UserId> é o uid simplelogin do firebase.

O totalScore (soma de todas as pontuações de todos os jogos disputados) de cada usuário (jogador) é armazenado na seguinte estrutura de dados

<firebase_root>/app/leaderboard/<userId>/totalScore/

os dados da tabela de classificação do totalScore são definidos usando o totalScore como prioridade, para fins de consulta

leaderboardRef.child(userId).setWithPriority({userName:userName, totalScore:totalScore}, totalScore)

A pontuação e o totalScore são valores inteiros numéricos. Esse é todo o detalhe da estrutura de dados atual em que consigo pensar.

questionAnswers(3)

yourAnswerToTheQuestion