2017-10-31 29 views
0

S3への直接的なjsブラウザのアップロードにおける主なセキュリティ上の懸案事項は、ユーザーがS3クレデンシャルをクライアント側に保存することです。S3へのダイレクトブラウザアップロードのセキュリティ上の懸念

このリスクを軽減するために、S3 documentationは中間サーバによって生成された短命のキーを使用することをお勧めします:

  1. ファイルを自分のWebブラウザでは、ユーザーがアップロードのために選択されます。
  2. ユーザーのブラウザはサーバーに要求を行い、サーバーにアップロード要求に署名するための一時的な署名が生成されます。
  3. 一時的に署名されたリクエストはJSON形式でブラウザに返されます。
  4. ブラウザは、サーバーから提供された署名付きの要求を使用してAmazon S3に直接ファイルをアップロードします。

このフローの問題は、公開アップロードの場合にどのように役立つか分かりません。

アップロードページが公開されているとします。つまり、短命キーを生成するサーバーAPIエンドポイントも公開される必要があります。悪意のあるユーザーがapiエンドポイントのアドレスを見つけ、何かをアップロードするたびにヒットする可能性があります。サーバーは、リクエストが実際のユーザーからアップロードページや他の場所から来たものかどうかを知る方法がありません。

ええ、私は、apiに入ってきた要求のドメインをチェックして検証することができますが、ドメインが簡単にスプーフィングされる可能性があります(リクエストがブラウザクライアントから来ない場合)。

このすべてのことも懸念事項ですか?主なリスクは、私のS3アカウントを悪用して、それに物資をアップロードする人です。私が知る必要がある他の懸念がありますか?これは何とか緩和できますか?

答えて

2

アップロードページが一般公開されているとします。つまり、短寿命のキーを生成するサーバーの APIエンドポイントは、公開する必要があります。 です。悪意のあるユーザーが、api エンドポイントのアドレスを見つけて、何かをアップロードするたびにヒットすることができます。 サーバーでは、アップロードページまたは他の場所からの の実際のユーザーからのリクエストかどうかを知る方法がありません。

もしあなたが気になるのであれば、ユーザーはあなたのウェブサイトにログインする必要があり、ログインプロセスを処理するのと同じサーバー側認証サービスの背後にAPIエンドポイントを提供する必要があります。その後、認証されたユーザーだけがファイルをアップロードできます。


また、S3 pre-signed URLsを調べることもできます。

+0

ログイン後にAPIを置いても問題は解決しますが、安全な状態に保ち、公開アップロードページを使用して他の方法でアップロードできるようにする方法があるかどうかは疑問でした。私はそこにないと思いますか? – Michael

+1

このようなものを認証なしで完全公開することはできません。また、安全にすることもできます。少なくとも私の知るところではない。 –

関連する問題