firebase - 保护 Firebase 数据免遭授权用户更新自己的数据

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

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

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

现在,一旦用户登录,用户将看到付款选项,并且一旦付款完成,该特定 ID 的数据库值将根据“付款状态”进行填充,如上面的 JSON 所示。一旦付款状态为"is",则仅允许用户查看主页。

我创建了如下所示的安全规则:

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

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

  }
}}

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

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

最佳答案

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

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

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

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

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

关于firebase - 保护 Firebase 数据免遭授权用户更新自己的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36394236/

相关文章:

Swift:当用户关闭应用程序时将图像上传到 Firebase 云存储

javascript - 存储在 firebase 服务器中的数组有时会将其元素设置为未定义

java - 如何修复在类 com.example.chatappfirebase.Model.User 上找不到 id 的 setter /字段?

javascript - $firebase 在 AngularJS 中未定义

javascript - 循环通过 $id 从 Firebase 后端生成自定义的唯一页面数据

javascript - 使用 AngularJS 和 Firebase 更新 ng-repeat 中的值

reactjs - Firebase 身份验证状态在客户端上保留,但在硬刷新时不保留

Firebase 规则 : how to restrict access based on user role

firebase - Firestore 安全规则获取引用字段/ID

android - FCM 通知标题仍然是 "FCM Message"