Firebase Cloud Storage:用户可以列出文件夹/存储桶中的所有对象吗? (安全)

时间:2018-08-22 22:48:10

标签: firebase google-cloud-storage firebase-storage firebase-security

我正在尝试为使用Firebase存储的应用程序保护图像。

当前我的存储层次结构为bucket/{userId}/{UUID.jpg}

上传每张图片时,我将文件路径写入 Firestore

写入使用AuthFirebase Storage Security Rules

来确保对每个文件夹的访问权限
allow write: if request.auth.uid == userId
             && request.resource.size < 2 * 1024 * 1024
             && request.resource.contentType.matches('image/.*')

读取访问仅限于所有经过身份验证的用户。客户端使用iOS上的 FirebaseUI 通过内置的SDWebImage功能访问图像

allow read: if request.auth != null;



我的问题#1

最终我的主要问题是:用公共/私人用户保护社交网络图像的最佳方法是什么?如果您没有答案,请直接进入问题#2

我当前的read访问安全规则十分脆弱

我正在做的事情比使用Download URLs稍好,因为这些信息可以传递给任何设备上的任何人,以下载图像。

但是,只要拥有登录用户名的身份,任何具有私人用户userId的不良演员都可以读取该私人用户的任何图像。

选项1 -我希望能够使用追随者列表(在Firestore中)来保护谁可以读取存储桶/文件夹中的对象(就像在Firestore安全规则中一样),但是似乎你做不到(因为没有人回应)。

Limit Google Cloud Storage Access to Followers (stored in Firestore)

选项2 -如果我保持与现在相同的结构,是否可以认为它相对安全?它依赖于晦涩。即使该人拥有私人用户的userId(因此可以在Cloud Storage中找到该文件夹​​),该人仍需要确切的文件名才能下载该图像。

但是,如果人们可以列出Cloud Storage文件夹中的所有对象,这一切都会崩溃

问题2

是否可以列出某个Cloud Storage文件夹中的所有对象?

弗兰克·范·普菲伦(Frank van Puffelen)在previous question中表示,Firebase Storage没有用于列出文件夹中对象的 API

  

Firebase Storage中目前没有API调用可列出所有文件   在文件夹中。

但是还有其他更直接的访问方式,例如 GCS JSON API 吗?

https://cloud.google.com/storage/docs/json_api/v1/objects/list

例如使用上面的存储桶层次结构。 privateUserXYZ有一个包含所有图像的文件夹(randomString1.jpg,randomString2.jpg,randomString3.jpg等)

不好的演员可以使用privateUserXYZ的userId并列出其文件夹中的所有图像(然后下载它们)吗?

OR

他们是否需要猜测privateUserXYZ的每个字符串才能下载图像?因此,使用更长的字符串更好(以防止暴力破解)?

0 个答案:

没有答案