【问题标题】:How to prevent attacks on firebase functions?如何防止对firebase功能的攻击?
【发布时间】:2020-04-26 01:32:17
【问题描述】:

我在我的云功能中看到一些非常不寻常的流量,我只能将它们归因于攻击(请注意,我使用的是免费的 Spark 计划)。

收到垃圾邮件的云函数是:

exports.onPlayerSolvedPuzzle = functions.database.ref('/U/{userId}/CP/{puzzleId}/S')
.onCreate((snapshot, context) => 
{
...

如您所见,它被设计为在我的数据库中添加新数据时调用,路径为 /U/{userId}/CP/{puzzleId}/S

我的数据库规则指定只有经过身份验证的用户才能使用他的 ID 写入数据,另外我检查该数据条目是否不存在

{
  "rules": 
  {
    "U":
    {
      "$user_id":
      {
        ".read" : false,
        ".write": "auth.uid != null && $user_id === auth.uid",
        "CP":
        {
          "$puzzle_id":
          {
            "S":
            {
              ".validate": "!data.exists()"
            },
...

最后,我只启用了“Play Games”和“Game Center”身份验证,因此不能使用匿名帐户或电子邮件/密码帐户来修改我的数据库。

当攻击发生时,我的数据库的最大同时连接数从平均 20 个跃升至 100 个,云函数调用数从每天 1000 个或更少跃升至每天 20000 个或更多,耗尽了我的每月使用量配额不少。

我应该如何保护我尚未完成的云函数调用?

P.S.:当 'onPlayerSolvedPuzzle' 执行时,它会写入数据库的另一部分,以增加使用此 'puzzle_id' 解决难题的人数(如果没有,则创建一个条目)。我有代码来查看数据库的那部分中是否有与不应该存在的“puzzle_id”相关的条目(我知道所有谜题的puzzle_id)。当我运行这段代码时,我根本看不到任何问题,所以我相信该函数不是在路径中使用随机的 puzzle_id 调用的。

【问题讨论】:

    标签: firebase-realtime-database google-cloud-functions


    【解决方案1】:

    需要知道的一些事情:

    • 无法阻止某人调用您的公共函数之一。您所能做的就是在函数内部编写代码来确定请求是否有效并且应该采取行动。您可能需要考虑将用户 ID 令牌与请求和 verify it with the Admin SDK 一起发送。

    • 安全规则不适用于使用 Admin SDK 的后端代码。

    • 如果您观察到看似滥用的流量,您应该直接联系Firebase support 进行举报。

    【讨论】:

      猜你喜欢
      • 2020-04-07
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 2013-04-18
      • 2016-02-05
      相关资源
      最近更新 更多