android - 在 Android 应用中硬编码 Firestore 的集合名称或文档 ID 是否安全?
问题描述
我的 Firestore 数据库中有一个“帖子”集合。要从此集合中获取文档,get()
可以使用该方法,例如FirebaseFirestore.getInstance().collection("posts").limit(10).get();
. 现在,如果有人在加密和使用 proguard 之后以某种方式对我的应用程序进行逆向工程并找出集合名称“posts”,那么该人是否可以运行该命令FirebaseFirestore.getInstance().collection("posts").get();
以不受任何限制地一次从他身边获取所有文档?这可能是一个潜在威胁,因为这可能会减慢其他用户的服务并显着增加 Firestore 成本,这类似于 DoS 攻击,即使 Firestore 规则设置为只有登录用户才能访问集合“帖子”。有没有办法防止此类攻击?
解决方案
如果您的客户端代码完全查询 Firestore,则无法完全隐藏您正在使用的集合和文档的名称。一旦字符串在客户端应用程序中可用,它本质上就是公共信息。
开发人员应使用安全规则来确定谁可以读取和写入哪些集合和文档。由于它们是在服务器上评估的,因此无法从客户端代码中绕过它们。您可以实施安全规则,以您的应用所需的方式正确限制访问。
Firestore 是由 Google 管理的云服务,它会检测某些形式的滥用行为。您不必担心管理系统上的负载 - 它可以大规模扩展。
您还应该知道,每当您开始通过公共 API 提供数据时,总会有人试图滥用该系统。这是所有基于云的服务的问题。如果您怀疑项目中存在滥用行为,请直接联系 Firebase 支持。
推荐阅读
- java - QueryDSL 按计算字段排序
- javascript - 表单值为空
- python - Python 类问题“AttributeError: 'int' object has no attribute isSolvable”
- node.js - NPM 无法安装某些包
- haskell - 列表理解正在删除第一个字符,为什么?
- python - 允许用户在不改变状态的情况下编写简单的数学函数的语言?
- python - 从 os.system() 启动游戏时,pygame 冻结
- cocos2d-x - 可以用 Cocos Creator 打开 cocos studio .csd 文件吗
- c# - 如何从 C++ 到 C# 获取 unsigned int 数组?
- javascript - 如何从多个起点触发一个函数?