2016-12-23 51 views

回答

1

從安全角度來看,沒有任何意義上的差異。

簽署的網址與PUT工作,而簽約政策文件與POST工作。

兩者都使用簽名算法是計算,是不可行的逆向工程。

兩者都允許您限制可以寫入/覆蓋的存儲桶和密鑰。 POST更靈活,允許您選擇允許(通過策略)目標對象鍵來匹配前綴而不是確切的字符串,而這不可能是您想要做的事情。

兩者都有到期機制。

兩者都是免疫在這個意義上的篡改,這是不可能修改的方式,允許比將要執行的期望的一個(由簽名授權)以外的動作的請求。的POST上傳

一個可能的次要優點是政策文件允許你指定一個有效的尺寸範圍上傳。 PUT要求允許任何大小或通過將Content-Length標頭包括在由服務器簽名的標頭列表中來指定精確的大小(以字節爲單位),這需要使用簽名版本4.(較舊的S3區域還支持簽名版本2,但略微更容易實現,但所有地區都支持V4)

決定哪一個從進程/流的角度看是很有道理的給你,明白了什麼是真的引擎蓋下做的,應該沒有安全相關理由相互支持。

+0

我注意到boto3庫中有預先簽訂的POST數據寫入到水桶的選項:HTTP: //boto3.readthedocs.io/en/latest/guide/s3.html#generating-presigned-posts ...看起來你也可以設置條件,比如「content-length-range」。 – Rob

+0

@Rob,這是構建一個政策文件(就像你在問題中提到的,我在答案中提到的那樣)以及表單字段。有關支持此服務的底層服務的低級別接口的示例在此處進行了介紹(http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html)。 –

0

不要重新發明輪子。考慮使用像fineuploader這樣的庫,它現在是免費的,並在django方面有一個很好的例子(簽名庫的URL直接上傳到S3的代碼)。圖書館有很多很好的功能,包括將文件分成小部分。我已經使用它來成功加載非常大的視頻文件(16GB +)。

(道歉,如果這不是一個直接的答案,OP,但可能使答案不那麼重要)

+0

謝謝。這個庫看起來非常有用。 – Rob