Firebase规则写入权限
我是firebase的新手,如果这是一个愚蠢的问题,我深表歉意。Firebase不断向我发送电子邮件,声明如下: 我们检测到您的安全规则存在以下问题:Firebase规则写入权限,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我是firebase的新手,如果这是一个愚蠢的问题,我深表歉意。Firebase不断向我发送电子邮件,声明如下: 我们检测到您的安全规则存在以下问题: 任何用户都可以读取整个数据库 任何登录的用户都可以写入整个数据库 我的应用程序是一个字谜游戏,不要求用户登录(没有任何用户输入),因此我不能使用我在这里发布的类似问题中看到的用户ID规则作为建议 我不介意任何人能够读取我的数据库,但是,我想设置一个权限,使我成为唯一一个对数据库具有写访问权限的人 如果我不能使用USERID权限,我如何更改数据
- 任何用户都可以读取整个数据库
- 任何登录的用户都可以写入整个数据库
如果我不能使用USERID权限,我如何更改数据库设置,这样我才是唯一能够写入它的数据库?
< P>如果您只从自己的开发机器中设置数据,请考虑使用Admin SDK。此SDK使用管理权限访问后端,因此它绕过了安全规则。这意味着您可以拥有以下规则:{
"rules": {
".read": true,
".write": false
}
}
当我创建一个应用程序管理页面(通常是一个简单的StackBlitz或JSBin)时,甚至在匿名登录用户之前,我通常要做的第一步就是匿名登录,记录我的UID,然后只授予我的UID写权限 在规则中,类似于:
{
"rules": {
".read": true,
".write": "auth.uid === 'myUid'"
}
}
稍后,如果我展开用户登录(即使只是针对其他管理员),我会将其展开为更详细的检查,例如:
{
"rules": {
".read": true,
".write": "auth.uid === 'myUid' ||
(auth.token.email_verified == true &&
auth.token.email.matches(/.*@google.com$/))"
}
}
使用上述所有规则,您仍然会收到一条关于用户读取整个数据库能力的警告。顶级
“.read”:true
的主要问题是,它允许使用单个HTTP访问https://yourproject.firebaseio.com/.json
。有相当多的脚本使用它来查找用户信息
如果这不是应用程序的问题,您可以在此时禁用警报
如果< <强>是< /强>关注,可以考虑通过对规则中的访问模式进行编码来保护数据。 例如,如果一个顶级节点包含所有游戏的列表,然后另一个顶级节点包含每个游戏的移动,则可以将读取权限向下推到这些级别:
{
"rules": {
"games": {
".read": true,
},
"moves": {
"$gameid": {
".read": true
}
}
}
}
这种结构,任何人都可以阅读完整的游戏列表。但人们当时只能阅读一场比赛的招式。这与您首先看到游戏列表,然后看到所选游戏的移动的应用程序相匹配
使用这些规则,用户仍然可以访问所有数据,但前提是他们遵守应用程序的规则。(也许更重要的是)公然的顶级
https://yourproject.firebaseio.com/.json
访问不再有效。鉴于您显然不使用登录,您如何在“我是唯一具有数据库写访问权限的人”中识别“我”?