auth 有多安全!== null?火力基地

Posted

技术标签:

【中文标题】auth 有多安全!== null?火力基地【英文标题】:How safe is auth !== null? Firebase 【发布时间】:2017-12-25 00:06:01 【问题描述】:

我使用 Firebase 已经有一段时间了,但我现在才决定真正研究安全规则。

我的问题是,“auth !== null”有多安全?是的,我意识到这意味着只有经过身份验证的用户才能访问数据,但是通过身份验证有多容易?有人可以注册该应用程序,然后使用这些凭据将请求直接获取到我的数据库中吗?

就像我说的,我是安全规则的新手,所以如果这是一个明显的问题,我很抱歉。

这是我的安全规则:


  "rules": 
    "Users": 
      "$user_id": 
        ".write": "$user_id === auth.uid",  
        ".read" : "auth !== null",
        "shoofers" : 
          ".write" : "auth != null"
        
      
    
  

谢谢!

尼尔

【问题讨论】:

【参考方案1】:

您可以在登录身份验证后或未经身份验证的情况下授予用户访问数据库的权限。 但是允许用户通过身份验证访问您的数据库既好又安全

具有身份验证的安全规则是

  
  "rules": 
    ".read": "auth != null",
    ".write": "auth != null"
  

并且没有身份验证

     
  "rules": 
    ".read": "auth == null",
    ".write": "auth == null"
  

【讨论】:

【参考方案2】:

用户可以通过匿名、电子邮件/密码、各种 OAuth 提供商和电话号码登录进行身份验证。您可以启用/禁用其中任何一个。您上面的根规则允许通过所述任何机制对任何经过身份验证的用户进行只读访问,并允许指定用户对他们自己的数据进行写访问。伪造登录非常困难。数据库将始终检查请求是否具有 ID 令牌(当 auth 不为空时)。 ID 令牌使用公钥加密,如果没有私钥就很难伪造。

【讨论】:

【参考方案3】:

我看到的是,当您使用 firebase 控制台中的“模拟器”并通过提供一些随机字符串作为 uid 来伪造身份验证时,firebase 不会检查它并允许访问。所以 auth!=null 是不够的,因为即使 uid=1 也会进行身份验证。

【讨论】:

以上是关于auth 有多安全!== null?火力基地的主要内容,如果未能解决你的问题,请参考以下文章

提供者禁用或不受支持的电容器火力基地

火力基地的错误

无法连接到火力基地

未声明的标识符 FIRAuth

从火力基地检索信息

火力基地规则有问题