Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
Firebase规则写入权限_Firebase_Firebase Realtime Database_Firebase Security - Fatal编程技术网

Firebase规则写入权限

Firebase规则写入权限,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我是firebase的新手,如果这是一个愚蠢的问题,我深表歉意。Firebase不断向我发送电子邮件,声明如下: 我们检测到您的安全规则存在以下问题: 任何用户都可以读取整个数据库 任何登录的用户都可以写入整个数据库 我的应用程序是一个字谜游戏,不要求用户登录(没有任何用户输入),因此我不能使用我在这里发布的类似问题中看到的用户ID规则作为建议 我不介意任何人能够读取我的数据库,但是,我想设置一个权限,使我成为唯一一个对数据库具有写访问权限的人 如果我不能使用USERID权限,我如何更改数据

我是firebase的新手,如果这是一个愚蠢的问题,我深表歉意。Firebase不断向我发送电子邮件,声明如下:

我们检测到您的安全规则存在以下问题:

  • 任何用户都可以读取整个数据库
  • 任何登录的用户都可以写入整个数据库
我的应用程序是一个字谜游戏,不要求用户登录(没有任何用户输入),因此我不能使用我在这里发布的类似问题中看到的用户ID规则作为建议

我不介意任何人能够读取我的数据库,但是,我想设置一个权限,使我成为唯一一个对数据库具有写访问权限的人


如果我不能使用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
访问不再有效。

鉴于您显然不使用登录,您如何在“我是唯一具有数据库写访问权限的人”中识别“我”?