我有一個 Laravel 應用程式,它使用 S3 存盤個人資料圖片,但也用于合同等敏感內容。例如,如果我提供一張圖片,我會得到這個 URL "bucket_name".s3."region".scw.cloud/"Content":。
僅當用戶在我的網站上時,我才想獲取此 URL 的內容。因為現在如果我復制/粘貼每個人都可以訪問的地址。
謝謝你的幫助
uj5u.com熱心網友回復:
有多種處理方法,具體取決于您希望擁有的安全性:
- 正如@jarmod 所建議的,您可以設定一個referer 標頭過濾器。這可行,但如果您有一個堅定的黑客,則可以偽造。
- 您可以為檔案創建預簽名 URL。這允許在您決定的時間內訪問。因此,例如,如果您只想要一個有效期為 3 分鐘的 URL,您可以生成它并繼續發送。即使有人要獲得該 URL,它的有效期也是有限的。
- 您的 Laravel 應用程式可以充當 S3 內容的代理。您的 S3 存盤桶將是私有的,您的應用程式將有權從存盤桶中讀取。當檔案請求進入時,它將轉到您的應用程式,應用程式將從 S3 讀取檔案并將其傳遞給最終用戶。通過這種方式,您可以肯定您的用戶已登錄并能夠訪問該檔案。但是,這可能需要更多時間,因為現在您需要從 S3 讀取(盡管您可能能夠實作一些快取),然后將檔案寫入最終用戶。
uj5u.com熱心網友回復:
您可以根據 HTTP 引薦來源標頭的存在來訪問存盤桶中的物件。以下是 S3 存盤桶策略的示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Principal": "*",
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::mybucket/*"
],
"Effect": "Allow",
"Condition": {
"StringLike": {
"aws:Referer": [
"http://www.example.com/*",
"http://example.com/*"
]
}
}
}
]
}
請注意:
- HTTP 標頭可以被欺騙
- referrer 標頭是可選的,因此并非所有合法客戶端都會顯示它
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/434232.html
