firebase - 如何限制 Firebase 存储的下载次数?
问题描述
据我所知,Firebase 存储中没有可以限制每个用户的下载次数的安全规则。
我可以使用这样的简单技巧来限制写入的文件大小或文件数量:
match /public/{userId}/{imageId} {
allow write: if request.resource.size < 5 * 1024 * 1024 &&
imageId.matches("[1-5]\.txt");
}
每个对象的更新限制为每秒一次,因此对单个对象的快速写入不会扩展。
所以这很好,但是一旦恶意用户知道下载链接,如何防止读取过多?根据Google 配额和限制,这对于安全性尤其重要:
对对象的读取没有限制。存储桶最初支持每秒大约 5000 次读取,然后根据需要进行扩展。
解决方案
没有限制存储在 Cloud Storage 中的文件的下载量的配置。如果用户有权读取任何数据,则他们可以随心所欲地读取它。没有与每个用户消耗的数据量或文件被访问的次数相关的核算。没有安全规则可以让您以这种方式限制访问。没有可让您自己进行会计核算的 Cloud Functions 触发器。
上传限制的文档与您要执行的操作无关。可扩展性的限制只与底层系统的性能有关,与最终用户的权限无关。
如果您想限制最终用户可以做什么,您需要通过您构建的一些中间件组件来路由他们,该组件跟踪他们如何使用您提供的 API 来下载文件,并根据他们之前的行为限制他们可以做什么。这显然是不平凡的实现,但它是可能的。
推荐阅读
- swift - CGSize 不接受 `.zero`。'init(width:height:)' 的模糊使用
- python - 打印 2D NumPy 数组时如何删除外括号
- flutter - 更改格式日期时间
- javascript - 使用 insertAdjacentHTML 会在 .js 文件中出现错误,但在控制台片段中却没有
- javascript - 如何在导航栏外发起点击以将其关闭
- java - 为什么 if 语句“if(1)”在 Java 中会出错,但在 C++ 中却是正确的?
- javascript - 高亮文本字段的逻辑操作
- php - 用PHP生成中间点的分页
- tensorflow - 最快的 Mask R-CNN 实现是什么
- powershell - 在 Powershell 中从 JSON 中删除项目