8

私のアプリ ユーザーは、ファイルを 1 つのバケットにアップロードします。オブジェクトが上書きされないように、S3 バケット内の各オブジェクトに一意のキーがあることを確認するにはどうすればよいですか?

現時点では、ファイルを S3 に送信する前に、php スクリプトでランダムな文字列を使用してファイル名を暗号化しています。

議論のために、アップローダがアップロード時にファイル名を操作する方法を見つけたと仮定しましょう。彼は、私のサイトのすべての画像をバナナの写真に置き換えたいと考えています。暗号化が失敗した場合に S3 でファイルが上書きされないようにする良い方法は何ですか?

編集: バケットから画像を表示するときに、画像 URL でバージョン ID を指定できないため、バージョニングが機能するとは思わない。

4

2 に答える 2

3

暗号化していますか、それともハッシュしていますか? md5 または sha1 ハッシュを使用している場合、攻撃者はハッシュの衝突を簡単に見つけて、バナナの皮を滑らせてしまう可能性があります。ランダムな初期化ベクトルなしで暗号化する場合、攻撃者は数百のファイルをアップロードした後にキーを推測できる可能性があり、暗号化はおそらく最善の方法ではありません. これは計算コストが高く、実装が難しく、より少ない労力でこのジョブのためのより安全なメカニズムを得ることができます。

十分に信頼できるエントロピーのソースを使用して、各ファイル名の先頭にランダムな文字列を追加する場合、問題は発生しないはずですが、とにかくファイルが既に存在するかどうかを確認する必要があります。ループをコーディングしてチェックし、 を使用してS3::GetObject、新しいランダム文字列を生成することは、実行する必要がほとんどないものに対して多大な労力のように思えるかもしれませんが、「ほとんどない」とは、最終的に発生する可能性が高いことを意味します。

于 2012-09-30T02:02:31.050 に答える
-1

アップロードする前にその名前のファイルをチェックすると機能します。

ファイルがすでに存在する場合は、ファイル名を再ランダム化して、再試行してください。

于 2012-09-30T01:46:51.070 に答える