Firebase wie man numerische Daten vor Manipulationen durch Benutzer schützt, z. Spielstand

Ich entwickle ein Multiplayer-Spiel mit Firebase. Die Spielerbewertung wird nach jedem Spiel in der Feuerbasis aufgezeichnet, und auch das Feld playerTotalScore wird mit der neuen Gesamtsumme aktualisiert. Meine Frage: Ist es möglich, das playerTotalScore-Feld nur mit Hilfe von Firebase-Sicherheitsregeln gegen willkürliche Manipulationen durch den Benutzer zu sichern? Wenn das so ist, wie

Ich habe ausführlich Informationen zur Firebase-Sicherheit auf der Firebase-Website durchgesehen. Ich verstehe zwar, dass es möglich ist, einige komplexe Logik in die Sicherheitsregeln zu implementieren (erhöhen Sie eine Zahl um einen bestimmten Betrag wie diesenKer oder nur Feld einfügen ".write": "!data.exists()"), scheint keine der Informationen in diesem Fall zu helfen. Nur-Inkrement-Regeln sind nicht ausreichend, da die Punktzahl durch mehrfaches Inkrementieren manipuliert werden kann. Nur Einfügen scheint eine Option für totalScore zu sein, da dies nach jedem Spiel aktualisiert wird.

Aktualisiere

Wie von Kato angefordert, hier der spezifische Anwendungsfall.

Das Spiel, das ich entwickle, ist ein Quizspiel, in dem die Spieler Fragen beantworten und die Punktzahlen der Spieler in Echtzeit angezeigt werden.

Während des Spiels wird die Punktzahl für dieses bestimmte Spiel nach jeder Frage durch die folgende Anweisung aktualisiert:

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

Nach dem Ende des Spiels wird der Gesamtscore (alle gespielten Spiele) für den Spieler als @ berechnetotalScore=totalScore+gameScore und dann wird die Gesamtpunktzahl des Spielers in Firebase mit der folgenden Anweisung aktualisiert:

leaderboardRef.child(userId).setWithPriority({userName:userName, totalScore:totalScore}, totalScore)
Update2: Datenstruktur wie von Kato @ angeforde

Hier ist die spezifische Struktur, die ich derzeit habe. Da dies nicht in Stein gemeißelt ist, bin ich offen für Änderungen, die gemäß dem empfohlenen Ansatz zur Sicherung der Daten erforderlich sind.

Die Punktzahl für jedes von einem Benutzer (Spieler) gespielte Spiel ist in der folgenden Struktur gespeichert.

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

<gameId> ist der von der Firebase generierte Schlüssel als Ergebnis des Aufrufs der Methode firebase push ().<UserId> ist die einfache Anmelde-UID der Firebase.

Der Gesamtwert (Summe aller Punkte für alle gespielten Spiele) für jeden Benutzer (Spieler) wird in der folgenden Datenstruktur gespeichert.

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

Leaderboard-Daten für totalScore werden mit dem totalScore als Priorität für Abfragezwecke festgelegt.

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

Both score und totalScore sind numerische Ganzzahlwerte. Das ist alles Detail zu der aktuellen Datenstruktur, die ich mir vorstellen kann.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage