【问题标题】:How to Firebase prevent abusing file upload and remove legacy files?Firebase 如何防止滥用文件上传和删除旧文件?
【发布时间】:2016-10-22 05:16:15
【问题描述】:

在 Firebase 中,存储功能很舒适。但是我有两个问题要使用存储功能。

  1. 如何防止用户无限上传文件?例如)如果我可以写 /{uid}/{timestamp}/{fileName} 路径,用户可以上传直到存储空间爆炸。
  2. 如何跟踪遗留文件并删除它们?如果用户使用图像文件上传聊天消息并删除图像,文件仍然存在于存储中。有什么钩子可以管理这个吗?

谢谢!

【问题讨论】:

    标签: firebase firebase-storage


    【解决方案1】:

    好问题:

    您可以使用Firebase Storage Security Rules 对上传实施任意约束。只要文件在名称或元数据中有一条唯一的识别信息,您就可以将其与用户联系起来并强制执行基于时间的访问(除其他外)。一个简单的例子:

    match /files/{userId}/{fileName} {
      // Only allow the authorized user to write to their files
      allow write: if request.auth.uid == userId;
    
      // Allow reads if the resource was created less than an hour ago
      allow read: if resource.timeCreated < request.time + duration.value(60, "m");
    }
    

    您要求的是垃圾收集系统 :) 简短的回答是,最好在客户端上执行任何文件删除以及删除任何数据库对象的同时,但我们都知道客户端是不可靠的。您还可以设置一个批处理作业(比如每天),从private backup 读取数据库数据,检查哪些 blob 不再被引用,然后删除它们。您也可以等待Google Cloud Functions,然后执行操作(例如在文件上传时写入数据库)以同步此信息。最后,您可以使用Object Lifecycle Management 方法在一定时间后清理您存储桶中的对象(删除、归档等)。

    【讨论】:

    • 我理解批处理作业是垃圾收集,但我认为您的第一个答案不是防止滥用文件上传的解决方案。我意识到如果存储规则不能引用数据库是不可能的。
    • 请澄清“滥用文件上传”,因为滥用某些东西的方式有很多种(存储过多数据、尝试上传过于频繁等),并且这些向量中的每一个都需要不同的解决方案.这就是我们的安全规则(在服务器端强制执行)存在并且足够灵活以支持许多此类情况的原因。
    • 那是我的错。正如您所说,存储太多数据,过于频繁地上传是滥用文件上传的情况。我无法想象使用安全规则文档来阻止它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 2013-06-05
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多