Google提示Firebase数据库规则不安全,已认证用户能否通过其他途径修改数据?
问题答复
- 已通过身份验证的用户完全可以绕过你的应用,通过其他途径修改数据库数据。
原因很简单:你的Firebase项目配置信息本身就打包在客户端安装包中,任何人都可以轻松提取到这些配置,之后直接调用Firebase官方SDK或者REST接口,只要完成正常的身份认证流程拿到有效令牌,就可以无视你客户端侧的所有逻辑限制,对整个数据库执行读写操作,客户端的校验完全起不到安全防护作用。 - 你当前的规则确实属于高风险配置,完全可以在不影响游戏现有逻辑的前提下收紧权限,参考配置如下(假设所有玩家提交的数据都存储在
/online_players目录下,每个用户对应自己UID命名的子节点):
{ "rules": { ".read": "auth != null", "online_players": { "$user_uid": { // 仅允许用户修改自己UID对应的节点 ".write": "auth != null && auth.uid == $user_uid", // 校验写入的字段和格式必须符合业务要求,可根据你的实际业务调整 ".validate": "newData.hasChildren(['nickname', 'current_score', 'online_status']) && newData.child('current_score').isNumber() && newData.child('current_score').val() >= 0" } } } }
- 调整后你不需要修改任何客户端逻辑,游戏可以正常运行,同时可以解决Google的安全提示,也彻底避免用户恶意篡改数据的风险。你可以根据自己实际的存储目录结构、允许写入的字段和数值范围调整上述规则中的对应部分即可。
内容的提问来源于stack exchange,提问作者hrm
相关产品推荐
相关产品推荐

