保护授权用户的firebase数据以更新自己的数据

时间:2016-04-04 03:43:16

标签: firebase angularfire firebase-security firebase-realtime-database firebase-authentication

我的应用程序使用谷歌进行AngularJS + Firebase身份验证。 当用户注册到应用程序时,它会在数据库中创建该用户的条目,如下所示:

user
  ->Firebase Unique Key
           -> UserId: "google ID"
           -> User Name: "User Name"
           -> Payment Status:"No"

现在,一旦用户登录,用户将看到付款选项,一旦完成付款,该特定ID的数据库值将填入"付款状态"如上面的JSON所示。一旦付款状态为是,则只允许用户查看主页面。

我已经创建了安全规则,如下所示:

{
"rules": {
    ".read": "true",

  "user":{
    ".write": "auth.provider == 'google' && auth.uid!=null"

  }
}}

现在问题是:任何可以使用google登录的用户都有权写入此数据库。因此,一旦用户被授权,用户就可以在数据库中进行更改。用户也可以从localhost运行自己的代码,并可以对数据库进行更改。我不希望任何用户破解数据并将支付状态标记为"是"并进入主网站。

如何确保授权用户不会在此数据库中执行任何恶意活动。

1 个答案:

答案 0 :(得分:2)

Firebase使用基于身份的安全模型:您可以根据用户的身份安全地访问数据。一旦您授权用户编写特定属性,他们就可以编写该属性。

在您的用例中,允许用户更改其付款状态似乎是个坏主意。因此,无论他们是否正在运行您自己的应用或代码,他们都不应拥有对该媒体资源的写入权限。

所以你必须让另一个实体设置该字段。这可以是人类管理员或服务器。

进行人际交互并不像你想象的那么罕见。许多Web服务首先让所有者检查付款并更新受保护的元数据(您的方案中的付款状态)。一旦这变得难以管理,你可能已经为其他选择做好了准备。

server can run under trusted credentials,执行必要的检查,然后设置用户的付款状态。请注意,这并不是一个非常强大的服务器,因为它只是与Firebase数据库进行交互。请参阅this article for a good explanation