最近我收到了大量关于以下方面的 Firebase 通知:
<块引用>[Firebase] 您的 Cloud Firestore 数据库有不安全的规则
<块引用>我们检测到您的安全规则存在以下问题:任何用户都可以写入您的整个数据库。由于您的项目没有严格的安全规则,任何人都可以访问您的整个数据库。攻击者可以窃取、修改或删除您的数据,并提高您的账单。`
Edit2:我需要的是允许所有人无需任何登录即可写入,但只有管理员帐户才能从 Firebase 控制台读取它.
实时数据库规则:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
Cloud Firestore 规则:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow write;
}
}
}
编辑: JSON 中的数据库结构之一,其他看起来类似:
{
"battles" : {
"-KjiAFLI8oE_12345678" : {
"full" : true,
"player1" : {
"movement" : {
"down" : false,
"left" : false,
"right" : false,
"up" : false
},
"position" : {
"x" : 0,
"y" : 0
}
},
"player2" : {
"movement" : {
"down" : false,
"left" : false,
"right" : false,
"up" : false
},
"position" : {
"x" : 0,
"y" : 0
}
}
},
"-KjiAMVvJydR12345678" : {
"full" : true,
"player1" : {
"movement" : {
"down" : false,
"left" : false,
"right" : false,
"up" : false
},
"position" : {
"x" : 0,
"y" : 0
}
},
"player2" : {
"movement" : {
"down" : false,
"left" : false,
"right" : false,
"up" : false
},
"position" : {
"x" : 0,
"y" : 0
}
}
}
}
}
Edit3:与 Firebaser's answer 到 Firebase email saying my realtime database has insecure rules 相比,我不想/不使用 Firebase 身份验证/SSO。
鉴于这些情况,我是否必须/应该以某种方式修改它们?
答案 0 :(得分:2)
我收到了这些电子邮件,但我无法修复我的电子邮件,因为我的系统就是这样工作的。
就你而言,原因是:
allow write;
在您的 Cloud Firestore 规则中。这意味着任何人都可以从任何地方访问数据库。
因此,
<块引用>攻击者可以窃取、修改或删除您的数据,并且可以抬高您的账单。
将此规则更改为仅允许经过身份验证的访问,警报应停止。 卢卡 S.
答案 1 :(得分:2)
我可以想到两种解决方案,而不会危及安全(在某种程度上):
match /databases/{database}/documents {
match /{document=**} {
allow write: if request.auth != null;
}
}
}
例如:
match /Users-xQnFiECweq {
match /Courses-QrmGvMgF9C {
match /{multiSegment=**}{
allow write;
}
}
}
文档或集合名称末尾的字符串值充当只有您知道的密码,并且其他人很难猜测您数据库的确切结构。
我知道这是一种有点奇怪的方法,但总比只给每个人写访问权限要好。