2016-10-07 51 views
0

我想允许用户将文件上传到后端的火力点,我使用这样的规则:(存储填充在我结束)火力地堡私人规则不工作的存储

service firebase.storage { 
    match /b/<storage>/o { 
    match /{allPaths=**} { 
     allow write, read: if false; 
    } 
    } 
} 

这是只是这样我才能看到它是否会阻止用户访问我打开的文件。但如果我去链接,我可以看到图像很好。

这条规则怎么没有阻止用户查看它?谢谢。

+0

你能举一个你可以去的链接的例子,你希望受到这个保护吗? –

回答

2

有两种不同的方式从火力地堡存储下载文件:

  • 通过像一个存储参考getFile()writeToFile:方法下载。
  • 存储您从getDownloadURL()downloadURLWithCompletion:有一个HTTP URL。

如果您通过第一种方法下载,我们会在允许下载之前检查安全规则。这是将文件ACL ACL用户或用户组的安全方法。

如果通过第二种方法下载,这些网址是公开的,难以猜测的网址,所以任何人都可以访问它们,并通过令牌的unguessability在URL的末尾只保护。这种方法非常适合与用户之外的应用程序共享文件(图片Google照片,您希望将照片发送给家人中的某个人,但不希望让他们下载应用程序来执行此操作)。

这听起来像你正在使用的第二种方法,即如前所述,不检查安全规则。如果您想制作文件,您可以在Firebase控制台中删除下载令牌,或者不要与任何人共享这些网址。

+0

有没有什么办法可以让这些URL变为私有的,还是Google只是为了安全而默默无闻?这似乎对我很有疑问。 – DevShadow

+0

@DevShadow下载URLs作为能力令牌:如果您拥有令牌,则可以访问该文件。许多流行的照片共享应用程序使用某种形式的功能令牌(通常以签名的URL的形式)。 –

+0

能力令牌的关键在于它们足够难以猜测。在我们的例子中,我们使用代表随机选择的128位数字的UUID,这意味着有2^128 = 3.4e38个不同的可能性(在你的第一次尝试时可能有1/3.40282367e38 = 0的概率)。即使有人猜测每秒1M张照片(每年31.5T张照片):在有人耗尽搜索空间之前,您仍然有1.025年的时间。即使在1B的请求/秒,它仍然是1.022年。 –