如何校验Firebase官方认证服务合法userID以保障Firebase数据安全
首先要澄清一个核心认知误区:你担心的攻击者伪造request.auth对象绕过安全规则的情况,在Firebase生产环境中完全不可能发生。
request.auth是Firebase服务端在校验客户端请求携带的ID Token合法后,直接注入到安全规则运行环境的对象,客户端没有任何权限篡改或者自定义这个对象的内容,你提到的传入auth = {something: "hacker"}的场景,仅存在于本地模拟器的测试流程中,是开发者主动给模拟器传入自定义测试上下文才会出现的情况,和生产环境的运行逻辑完全无关。
如果你只是需要实现「仅已认证用户可写入」的需求,你最初写的allow write: if request.auth != null;规则本身就足够安全,不需要额外做其他校验。
如果你的业务有更严格的要求,比如要拦截已被删除的账号(ID Token还未过期的极短时间窗口内的请求),可以按以下步骤配置额外校验:
- 首先在Firestore中维护用户集合,比如路径为
/users/{uid},用户注册成功时写入对应uid的文档,用户账号被删除时同步删除该文档 - 调整安全规则,增加用户有效性校验:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { allow write: if request.auth != null && exists(/databases/$(database)/documents/users/$(request.auth.uid)); // 其他规则逻辑 } }
内容的提问来源于stack exchange,提问作者Martin Müsli
相关产品推荐
相关产品推荐

