Firebase实时数据库漏洞:存储令牌跨服务访问的防护问询
解决方案
1. 利用Realtime Database安全规则校验令牌受众(aud)
Firebase不同服务的认证令牌带有**受众(aud)**字段,标识该令牌的授权服务:
- Realtime Database令牌的
aud值为你的数据库URL(如https://project_name.firebaseio.com) - Storage下载令牌的
aud值为你的Storage Bucket标识(如project_name.appspot.com)
修改数据库安全规则,仅允许两种请求访问:
- 无认证令牌的未授权请求(满足无需认证只读需求)
- 令牌受众匹配Realtime Database URL的请求(合法的DB访问令牌)
具体规则代码:
{ "rules": { ".read": "auth == null || auth.token.aud === 'https://project_name.firebaseio.com'", ".write": false } }
此规则会直接拦截带有Storage令牌的请求(因其aud不匹配DB的URL),同时保留未认证的只读访问权限。
2. 确认Storage安全规则配置正确
确保Storage仅开放只读访问,避免令牌被滥用获取额外权限:
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read: if true; allow write: if false; } } }
3. 结合Play Integrity强化防护(后续阶段)
待Play Integrity部署完成后,可在Realtime Database规则中添加App Check校验,进一步限制请求仅来自你的合法Android应用,同时保留未认证访问(若需):
{ "rules": { ".read": "(auth == null || auth.token.aud === 'https://project_name.firebaseio.com') && request.app != null", ".write": false } }
此配置会要求所有请求通过App Check验证(确保来自你的应用),同时保留原有的令牌受众校验和未认证访问逻辑。
内容的提问来源于stack exchange,提问作者Prilaga
相关产品推荐
相关产品推荐

