好的,我正在创建一个网络应用程序。
网络应用程序基本上是一个游戏,你有很多分数。通过正确回答补充问题,您可以获得更多积分。
我使用Firebase实时数据库来保存用户'得分了。这是我在用户正确回答问题时运行的代码:( document.getElementById("score").innerText
是当前得分)
var user = firebase.auth().currentUser;
firebase.database().ref('users/' + user.uid).set({
score: parseInt(document.getElementById("score").innerText) + 2,
}).catch(function(error) {
console.log(error);
});
这样可行。但是,我发现,用户可以接受该代码,并将其放入控制台并获得无限分。
那么我该如何解决这个问题呢?如果需要更改,这是我当前的数据库规则:
{
"rules": {
".read": true,
".write": true
}
}
我更普遍的问题是
如何在Javascript代码中更改数据库值,但不允许用户在Javascript控制台中更改(或访问)数据库值?
我调查https://firebase.google.com/docs/database/security/securing-data并且找不到任何有用的东西。我想我需要在数据库规则中改变一些东西。
更新:到目前为止,建议的最佳解决方案是在Firebase中使用云功能。
答案 0 :(得分:3)
您必须将处理数据库的逻辑放在无法篡改的后端代码中。如果您已经使用Firebase,则云功能是典型的选择。
2017年I / O I gave a talk关于编写一个基于回合制的游戏,通过将所有核心逻辑放在后端使用云功能,可以免受作弊。细节略有过时,但原则保持不变。