2016-10-07 99 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年。 –