经过身份验证的用户滥用Firebase数据库来增加积分

时间:2019-07-12 16:24:57

标签: android firebase

我制作了一个android应用程序,并使用Firebase实时数据库作为后端。在应用程序中,我也有一些应用程序内购买产品。这些产品的购买点很高(例如150点,1000点等)。现在的问题是,我看到一些用户在其个人资料中增加了大量的积分。为了更好地查看Firebase数据库,我看到它们的点数增加了50k,100k。但是我没有这么大量的应用内购买产品。我已经厌倦了禁用他们的帐户,也找不到阻止它的方法。

我知道一些用于破解点数/硬币的应用程序,例如Freedom APK等。但是,这些应用程序需要将设备植根。因此,在启动应用程序时,我检查了设备是否已植根。目前,已root权限的设备不允许使用我的应用程序。他们仍然是黑客的要点。

我正在使用以下数据库规则

{
   "rules": {
     "Users": {
      "$userID": {
         ".write": "auth != null",
           ".read": "auth != null"
       }
     }
   }
}

数据库结构为:

Users-
    uId:
       userEmail
       userName
       userPoints

有效点增加的工作流程为:

User buy a In-App product --> User points increase as per the product value

User watch a rewarded video ad --> User points increase by +8

我想防止这些黑客产生积分。

1 个答案:

答案 0 :(得分:1)

我不是Android和实时数据库专家,但问题是用户对数据库具有写权限。

我不知道如何,但是他们可以以某种方式操纵发送到您的数据库的数据。

您需要先验证数据,然后再将其写入数据库。

您可以对安全规则进行一些验证,但是我认为最简单的方法是使用可调用的云函数来验证数据并撤消对数据库的写访问权限。

如果用户购买积分,则应调用云功能,以验证数据是否有效。如果数据有效,则云功能将更新数据库。这样,用户将无法操纵他们的观点。

对于我的在线商店,我使用云功能来在结帐时验证购物车内容,并且用户无法直接写入数据库。

您应该做类似的事情。

编辑:

在这里您可以找到有关云功能的介绍。

https://firebase.google.com/docs/functions

在这里,您可以找到我推荐的有关可调用云函数的一些信息。使用可调用函数,您可以直接从代码中调用后端函数,而无需进行API调用。

https://firebase.google.com/docs/functions/callable