Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 保护Firebase数据库免受黑客攻击_Javascript_Firebase_Firebase Realtime Database_Firebase Security - Fatal编程技术网

Javascript 保护Firebase数据库免受黑客攻击

Javascript 保护Firebase数据库免受黑客攻击,javascript,firebase,firebase-realtime-database,firebase-security,Javascript,Firebase,Firebase Realtime Database,Firebase Security,我有第二个问题要问你 我做了一个基于Firebase数据库的JS网站。我的一段代码创建了一个积分系统。使用函数“set”,代码在数据库中创建行“points”,其中包含获取的点数(默认为0)。我想在用户执行“某些操作”时将它们的数量增加1。在数据库规则中,我设置了一条线,允许仅向授权帐户添加和获取“点”的值 嗯 如果有人从我这里复制代码,将adding-1-point代码更改为adding-2000-points代码,并在授权后粘贴,会发生什么。然后他会在他的本地主机上打开网站,通过他的电子邮件

我有第二个问题要问你

我做了一个基于Firebase数据库的JS网站。我的一段代码创建了一个积分系统。使用函数“set”,代码在数据库中创建行“points”,其中包含获取的点数(默认为0)。我想在用户执行“某些操作”时将它们的数量增加1。在数据库规则中,我设置了一条线,允许仅向授权帐户添加和获取“点”的值

如果有人从我这里复制代码,将adding-1-point代码更改为adding-2000-points代码,并在授权后粘贴,会发生什么。然后他会在他的本地主机上打开网站,通过他的电子邮件和pw授权。。。 或者他甚至会用这些代码做一个浏览器扩展。 他会多拿2000分吗


所以,如何解决这个问题,隐藏或其他。我想了这么久,我找不到答案。在MySQL中更简单。

您可以为几乎任何场景编写安全规则

如果只允许增量为1,则简单的基础是:

".validate": "newData.val() = data.val() + 1"
如果您希望他们能够加或减1:

".validate": "(newData.val() === data.val() + 1) ||
              (newData.val() === data.val() - 1)"
如果要确保用户只能通过添加或减去1来修改自己的分数:

"scores": {
  "$uid": {
    ".write": "auth.uid === $uid"
    ".validate": "(newData.val() === data.val() + 1) ||
                  (newData.val() === data.val() - 1)"
  }
}

不断地。我见过的一些最高级的场景是验证国际象棋游戏移动的规则(我现在找不到它们,所以不确定它们是否曾在Firebase之外发布过),并且。

问题是数据结构,您不希望允许每个用户直接添加点数,因为这将是不可用的。您必须允许用户声明他们给出了一个分数或接受了一个分数,然后函数必须增加分数。 这应该是您的数据库结构:

{
  "objectsWithPoints":{
    "object1": {
    "attribute": "the value",
    "points": 2
  }
  "pointsForObjects":{
    "object1": {
      "uid1":true,
      "uid2": true
    }
  }
}
要实现安全性,您必须编写规则,允许用户仅在
PointsForbjects
节点中写入自己的对象:

"pointsForObjects": {
  "$objectId": {
      "$uid": {
              ".write": "auth.uid === $uid",
              ".read": "auth.uid === $uid"
       }
  }
}
这样,用户可以说*“我给点或我拿点”*如果没有数据,允许用户在UI中给点如果有数据允许用户在UI中取点

最后,要更新点,您必须使用函数设置侦听器,无论何时在
PointsForbjects
节点中写入内容,都要对属于该对象的每个节点进行计数,并将计数设置为该对象


这样,如果黑客试图编写
“uid:false
,或
“uid:1
,就没有问题了,因为你正在计算孩子的数目。任何黑客都不能添加多个孩子,因为它将被覆盖,因为密钥是相同的,只能是uid。

为什么我仍然被减数…我习惯了xD(我不是这里的选民)防止否决票的一个很好的方法是展示你已经尝试过的东西。展示你创建了哪些规则,以及你担心的黑客如何违反这些规则。我认为代码不能防止添加脚本代码。我的意思是,授权的人可以对数据库做任何事情,所以如果我给出你的规则,他将能够生成脚本添加点1乘1:/i是否能够使用Php向firebase添加内容?这将是最安全的方法(我使用symfony框架).我找到了,但我不知道从哪里可以获得google-service-account.json。我认为问题在于数据结构和使用Functions@Hubert13888像这样的重复调用是可能的。使用安全性可以实现的功能实际上仅限于您自己的能力和想象力。虽然在自定义服务器中实现某些功能可能更容易,通常可以使用安全规则(以不太熟悉的方式)实现这一点。