2015-12-15 51 views
0

我正在为所有数据存储构建一个使用Firebase的iOS应用程序。用户创建一个帐户并使用密码和电子邮件登录。出于安全原因,我想限制登录,或者至少将读取和写入权限限制在应用程序中。我不希望“任何人”可以创建帐户并访问数据,除非他们正在使用该应用程序。Firebase - 只允许使用密码和电子邮件登录应用程序

据我所知,只要他们登录,如果他们找到我的Firebase数据库的URL,任何人都可以访问这些数据。这对我来说似乎是一个很大的安全风险。

我当然实现了安全规则,但登录的用户仍然可以在不同位置读取和写入数据到数据库,所以基本上他们可以使用Javascript API连接我的Firebase数据库,然后读写?任何人都可以创建用户,只要他们知道我的数据库的URL?

有没有一些方法可以防止这种情况,比如在使用电子邮件和密码登录时使用自定义令牌?

回答

0

为了回答大家的一些问题:

...但登录的用户仍然可以读取 - 写 - 数据到数据库 在不同的位置所以基本上他们可以使用连接我的火力地堡 数据库JavaScript API然后读写?

您可以使用the $other rule,以确保没有多余的按键被写入到您的火力地堡数据库:

"$other": { 
    ".validate": "false" 
}, 

但你也可以用更细化的规则,以确保用户只能访问他们所需要的数据。只要他们知道URL到我的数据库

{ 
    "rules": { 
    ".read": "auth != null", // only authed users can read/write 
    ".write": "auth != null", 
    "users": { 
     "$uid": { 
     ".read": "auth.uid == $uid", // users can read/write their own data 
     ".write": "auth.uid == $uid" 
     } 
    } 
    } 
} 

而且任何人都可以创建用户?

要创建用户,您还需要使用在App Dashboard中指定的有效来源。这意味着不仅任何人都可以开始创建用户。

enter image description here

+0

“要创建的用户,你还需要有一个有效的原产地,你在应用信息中心指定。这意味着,不只是你的网址的人可以开始创建用户。”但是这似乎只适用于第三方认证?他们可能会创建自己的iOS应用并将其挂接到我的Firebase数据库。 – andlin

+0

我已经实现了$ other规则,但它们仍然可以写入允许的节点/密钥。尽管我在我的规则(如.isNumber().isString()等)中进行了基本验证,但我的大部分数据验证都是在应用程序中完成的,他们可以规避他们是否不使用应用程序 – andlin

+0

Origin still still适用于电子邮件和密码,即使他们不使用应用程序,验证也能正常工作,因为服务器上存在安全问题 –

相关问题