Amazon-S3

為多個客戶端安全地儲存和提供文件

  • March 9, 2020

我們正在開發一個網路應用程序,我們的使用者可以在其中(以及其他功能)上傳他們的文件。但是我們無法將這些文件儲存在我們的 VPS 上,因為儲存空間有限,所以我們決定使用 S3。

主要問題是我們必須確保使用者只能訪問他們自己的數據。因此,我們在數據庫中保留文件列表,以及有權訪問它們的使用者列表。我們的伺服器可以輕鬆地確定使用者是否有權訪問文件。但是如何實際向使用者提供文件呢?

我已經考慮過一些可能性,但實際上沒有一個是最好的。

  1. 使用 PHP 生成(過期)簽名的 url

這是一個非常簡單的方法,它也很快,但會導致非常難看和長的 url。

這是如何做到的

  1. 混淆的 URL

這意味著,我們將文件公開以供在 S3 上讀取,但所有文件都儲存在難以猜測的命名文件夾中,例如:24fa0b8ef0ebb6e99c64be8092d3ede20000. 但是,也許這不是最安全的方法。即使您永遠猜不到文件夾名稱,在您知道它之後(因為您實際上可以訪問它),您可以與任何人(與任何未經授權的人)共享該連結。

  1. 通過我們的伺服器下載文件

這意味著文件不是由 S3 直接提供的,而是首先我們的伺服器安全地讀取並提供服務。我們真的不想要這個:)

4.檢查推薦人

通過“確保”請求來自我們的伺服器(您可以設置 S3 來檢查引薦來源網址),可以改進*混淆 URL解決方案。*然而,這將是一個非常不可靠的解決方案,因為並非所有瀏覽器都會發送引用數據,而且它也可能被偽造。

為不同的客戶端安全地從 Amazon S3 提供文件的好方法是什麼?

這對你來說真的接近於“做我的系統架構”,但是你的四個想法是可變安全性的有趣案例研究,所以讓我們執行你的選項,看看它們的表現如何:


4.檢查推薦人

推薦人由客戶提供。信任客戶端提供的身份驗證/授權數據幾乎會使安全性無效(我只能聲稱是從您期望我來自的地方發送的)。

判決: TERRIBAD想法 - 微不足道的繞過。


  1. 通過我們的伺服器下載文件

不錯的主意,只要您願意花費頻寬來實現它,並且您的伺服器是可靠的。

假設您已經解決了普通伺服器/應用程序的安全問題,這是您提供的選項中最安全的。

**結論:**很好的解決方案。非常安全,但如果頻寬是一個因素,則可能不是最理想的。


  1. 混淆的 URL

通過默默無聞的安全?真的嗎?不

,我什至不打算分析它。就是不行。

結論:如果#4 是TERRIBAD**,這就是TERRIWORSE,因為人們甚至不必費力打造引薦來源標頭。猜一串數據,贏大獎


  1. 使用 PHP 生成(過期)簽名的 url

這個選項的吸商很低。

任何人都可以點擊 URL 並獲取數據,這是一個安全禁忌,但您可以通過使連結過期來緩解這種情況(只要連結壽命足夠短,漏洞視窗就很小)。

URL 過期可能會給一些想要長時間掛在下載連結,或者沒有及時獲取連結的使用者帶來不便——這有點糟糕的使用者體驗,但它可能是值得的.

結論:不如#3 好,但如果頻寬是一個主要問題,它肯定比#4 或#2 好。


我會怎麼做?

鑑於這些選項,我會選擇 #3 – 通過您自己的前端伺服器傳遞文件,並以您的應用程序通常執行的方式進行身份驗證。假設您的正常安全性相當不錯,從安全形度來看,這是最佳選擇。

是的,這意味著在您的伺服器上使用更多的頻寬,以及更多的資源充當中間人——但您總是可以為此收取更多的費用。

引用自:https://serverfault.com/questions/506763