Flutter web应用Firebase凭证暴露于index.html如何防范伪造客户端访问Firestore
针对Firebase Web端凭证暴露的防护方案
首先你需要明确一个基础设计:Firebase 客户端初始化的配置本身就是设计为可公开的,Web端运行的所有代码、配置本质上都对用户可见,你完全没有办法100%隐藏这些配置,所有防护的核心都应该放在后端侧的访问校验上,而非尝试隐藏前端配置。
核心防护手段
- 严格配置Firebase安全规则,这是最基础也是最核心的防护手段
绝对不要使用全开放的安全规则,比如默认测试用的allow read, write: if true;必须完全删除。所有数据库读写操作都要绑定身份或权限校验,比如仅允许用户读写自己所属的文档,可以写成:
敏感操作的规则需要额外添加权限校验,比如仅管理员可操作的接口,可以通过Firebase Auth的自定义声明做身份判断。match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; } - 启用Firebase App Check校验
给Web应用开启App Check的reCAPTCHA校验能力,开启后Firebase后端会自动拦截所有未通过App Check合法性校验的请求,哪怕攻击者拿到了你的客户端配置,没有通过验证也无法直接访问Firestore、Cloud Storage等后端资源。你也可以在安全规则中额外添加request.app != null的校验条件,实现双重防护。 - 敏感操作通过Cloud Functions中转
如果你有高敏感的业务操作,不要让前端直接对Firestore发起读写请求,改为前端先请求你自行编写的Cloud Functions接口,在Cloud Functions中完成完整的身份校验、参数合法性校验之后,再由服务端侧操作Firestore,避免前端直接接触核心数据的操作权限。
*注:前端代码混淆、配置加密等手段只能提升攻击者的破解成本,无法从根本上阻止请求伪造,永远不要将安全防护的核心逻辑放在前端侧实现。
内容的提问来源于stack exchange,提问作者Eight Rice
相关产品推荐
相关产品推荐

