Javascript 保护Firebase数据库免受黑客攻击
我有第二个问题要问你 我做了一个基于Firebase数据库的JS网站。我的一段代码创建了一个积分系统。使用函数“set”,代码在数据库中创建行“points”,其中包含获取的点数(默认为0)。我想在用户执行“某些操作”时将它们的数量增加1。在数据库规则中,我设置了一条线,允许仅向授权帐户添加和获取“点”的值 嗯 如果有人从我这里复制代码,将adding-1-point代码更改为adding-2000-points代码,并在授权后粘贴,会发生什么。然后他会在他的本地主机上打开网站,通过他的电子邮件和pw授权。。。 或者他甚至会用这些代码做一个浏览器扩展。 他会多拿2000分吗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代码,并在授权后粘贴,会发生什么。然后他会在他的本地主机上打开网站,通过他的电子邮件
所以,如何解决这个问题,隐藏或其他。我想了这么久,我找不到答案。在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像这样的重复调用是可能的。使用安全性可以实现的功能实际上仅限于您自己的能力和想象力。虽然在自定义服务器中实现某些功能可能更容易,通常可以使用安全规则(以不太熟悉的方式)实现这一点。