You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制Firebase Cloud Function仅接收Firebase Hosting站点的请求

可行解决方案

以下方案可以单独使用,也可以组合叠加获得更高的防护等级:

方案1:增强App Check校验逻辑,弥补令牌盗用漏洞

针对你当前App Check的实现缺陷,可以通过以下调整大幅降低风险:

  • 调低reCAPTCHA v3令牌有效期:在Google reCAPTCHA控制台将默认1小时的有效期改为5~10分钟,大幅缩小令牌被盗用后的可用时间窗口
  • 服务端增加额外校验规则:在firebase-admin校验App Check令牌通过后,额外校验令牌的hostname字段必须匹配你的Firebase Hosting绑定域名,不匹配直接返回403
  • 附Express适配的校验中间件代码参考:
const admin = require('firebase-admin');
admin.initializeApp();

const appCheckValidateMiddleware = async (req, res, next) => {
  const token = req.headers['x-firebase-appcheck'];
  if (!token) return res.status(401).send('Missing App Check token');
  try {
    const verifyResult = await admin.appCheck().verifyToken(token);
    // 额外校验域名
    if (verifyResult.token.hostname !== '你的Firebase Hosting绑定域名') {
      return res.status(403).send('Invalid request source');
    }
    next();
  } catch (err) {
    return res.status(401).send('Invalid App Check token');
  }
};

// 全局注册中间件,所有接口都会经过校验
app.use(appCheckValidateMiddleware);

方案2:Firebase Hosting反向代理+内网访问限制(优先推荐)

该方案从网络层面彻底切断公网直接访问云函数的路径,完全避免非法调用:

  • 第一步:配置Firebase Hosting重写规则,在项目的firebase.json中添加如下配置,将所有API请求代理到你的Express云函数:
{
  "hosting": {
    "public": "你的静态资源目录",
    "rewrites": [
      {
        "source": "/api/**",
        "function": "你的Express云函数部署名称"
      }
    ]
  }
}
  • 第二步:将Web应用的API请求地址改为同域名的/api/xxx路径,而非直接调用云函数的cloudfunctions.net域名,此时API请求和Web应用同源,完全不存在跨域问题
  • 第三步:在Google Cloud控制台调整云函数的Ingress Settings为仅允许内部流量和Cloud Load Balancing,公网直接访问云函数域名会被直接拦截,只有Firebase Hosting代理的内部流量可以到达云函数

方案3:叠加速率限制规则,避免超额账单

在方案2的基础上,可以额外配置速率限制,彻底避免高频调用产生的额外费用:

  • 在Google Cloud控制台开通Cloud Armor服务,绑定到Firebase Hosting对应的负载均衡实例
  • 配置速率限制规则:针对/api/**路径,设置单IP每分钟最多允许请求30~100次(可根据业务需求调整),超出阈值的请求直接返回429状态码,不会触发云函数执行
  • 无需修改业务代码,所有规则在网关层面生效

内容的提问来源于stack exchange,提问作者robila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:09:04