使用Firebase Hosting,如何将PURGE请求限制到特定IP

gjmwrych  于 2022-12-30  发布在  其他
关注(0)|答案(2)|浏览(171)

我有一个网站上的Firebase托管,使用静态html,没有服务器端的功能是用来交付的结果。
运行curl -X PURGE https://mywebsite.com -v -L时,结果为:

{ "status": "ok", "id": "20755-1619059392-3560756" }

我需要一种方法来限制此操作到特定的IP,这样就没有人可以重置我的缓存,这可能会导致额外的成本。
此外,Firebase似乎使用Varnish来管理缓存(这是一个空的东西)。
我客户的安全顾问向我们发送了关于如何处理此问题的建议,我不确定这是否是.htaccess语法或其他内容:

# Varnish recommends to using PURGE method only by valid user,
# for example by ip limiting and for other return 405 Not allowed:

acl purge { 
 "localhost";
 "192.168.55.0"/24;
}

sub vcl_recv {
 # allow PURGE from localhost and 192.168.55...
 if (req.method == "PURGE") { 
  if (!client.ip ~ purge) {
   return(synth(405,"Not allowed."));
  }
  return (purge);
 }
}

我不知道如何在Firebase Hosting中应用这个,我也没有使用服务器函数,只是使用了带有以下头文件的常规firebase.json

"headers": [
        {
          "source": "*.[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f].+(css|js)",
          "headers": [
            {
              "key": "Cache-Control",
              "value": "public,max-age=31536000,immutable"
            }
          ]
        },
        {
          "source": "**/*.@(json|eot|otf|ttf|ttc|woff|font.css)",
          "headers": [
            {
              "key": "Access-Control-Allow-Origin",
              "value": "*"
            }
          ]
        }
      ]
lb3vh1jj

lb3vh1jj1#

以下代码为 *VCL代码 *:

acl purge { 
 "localhost";
 "192.168.55.0"/24;
}

sub vcl_recv {
 # allow PURGE from localhost and 192.168.55...
 if (req.method == "PURGE") { 
  if (!client.ip ~ purge) {
   return(synth(405,"Not allowed."));
  }
  return (purge);
 }
}

这段代码允许你扩展Varnish的行为。这段代码必须被添加到你的/etc/varnish/default.vcl文件中。
将此代码添加到VCL文件后,必须重新加载varnishd进程以激活此VCL配置。
如果无法重新加载varnishd,也可以使用以下命令激活新的VCL文件:

sudo varnishadm vcl.load purge_acl /etc/varnish/default.vcl
sudo varnishadm vcl.use purge_acl

有关 VarnishVCL 编程语言的更多信息,请查看http://varnish-cache.org/docs/6.0/reference/index.html

ejk8hzay

ejk8hzay2#

暂时没有办法,这是我从火力支援那里得到的回答:
嗨达米安,
我叫谢尔盖,谢谢你来找我。我会协助你的。
这里要解决的第一件事是,Varnish服务超出了我们的范围,因此我们关于它在我们的托管服务中的实现的信息并不是最丰富的。
不幸的是,现在我们只能用现有的工具来控制缓存行为。
很抱歉,我们目前无法提供您所需的功能,如果您愿意,我们可以提交功能请求,以便我们的工程团队能够看到。

相关问题