如何限制仅特定域名请求可访问Firestore数据库且无需身份认证?
你写的这段Firestore安全规则无法实现你要的防范Postman等工具恶意调用的需求。
原因很简单:request.origin 是HTTP请求中可自由伪造的头字段,攻击者只需要在Postman等请求工具中手动将Origin头设置为你的自有域名,就能轻松绕过这个限制,完全起不到防护作用。
可行的解决方案
你可以根据自身业务场景选择以下两种方案,无需引入Firebase Authentication体系即可实现需求:
方案1:启用Firebase App Check(最推荐)
这是Firebase官方提供的客户端合法性校验能力,专门用于防止未授权的客户端访问你的云资源:
- 在Firebase控制台中为你的Web应用绑定你的自有域名,完成App Check的Web端配置
- 前端集成App Check SDK后,合法的前端请求会自动携带官方签发的校验令牌,攻击者无法伪造
- 调整你的Firestore安全规则如下即可完成限制:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if request.appCheck.valid == true; } } }
方案2:通过反向代理封装所有Firestore操作
- 你可以使用Cloud Functions、Cloud Run或者自有业务后端,将所有Firestore读写操作封装为自定义接口
- 关闭Firestore的公开访问权限,仅允许你的后端服务账号调用Firestore
- 在自定义接口层统一校验请求的Origin,仅放行来自你自有域名的请求,前端所有数据库操作都通过自定义接口转发,不直接调用Firebase SDK访问Firestore。
这种方案可定制性更高,但需要额外开发接口层。
注意:无论选择哪种方案,都建议配合最小权限原则细化Firestore安全规则,不要全局开放所有文档的读写权限,进一步降低数据泄露风险。
内容的提问来源于stack exchange,提问作者mohamed mostapha
相关产品推荐
相关产品推荐

