S3への直接的なjsブラウザのアップロードにおける主なセキュリティ上の懸案事項は、ユーザーがS3クレデンシャルをクライアント側に保存することです。S3へのダイレクトブラウザアップロードのセキュリティ上の懸念
このリスクを軽減するために、S3 documentationは中間サーバによって生成された短命のキーを使用することをお勧めします:
- ファイルを自分のWebブラウザでは、ユーザーがアップロードのために選択されます。
- ユーザーのブラウザはサーバーに要求を行い、サーバーにアップロード要求に署名するための一時的な署名が生成されます。
- 一時的に署名されたリクエストはJSON形式でブラウザに返されます。
- ブラウザは、サーバーから提供された署名付きの要求を使用してAmazon S3に直接ファイルをアップロードします。
このフローの問題は、公開アップロードの場合にどのように役立つか分かりません。
アップロードページが公開されているとします。つまり、短命キーを生成するサーバーAPIエンドポイントも公開される必要があります。悪意のあるユーザーがapiエンドポイントのアドレスを見つけ、何かをアップロードするたびにヒットする可能性があります。サーバーは、リクエストが実際のユーザーからアップロードページや他の場所から来たものかどうかを知る方法がありません。
ええ、私は、apiに入ってきた要求のドメインをチェックして検証することができますが、ドメインが簡単にスプーフィングされる可能性があります(リクエストがブラウザクライアントから来ない場合)。
このすべてのことも懸念事項ですか?主なリスクは、私のS3アカウントを悪用して、それに物資をアップロードする人です。私が知る必要がある他の懸念がありますか?これは何とか緩和できますか?
ログイン後にAPIを置いても問題は解決しますが、安全な状態に保ち、公開アップロードページを使用して他の方法でアップロードできるようにする方法があるかどうかは疑問でした。私はそこにないと思いますか? – Michael
このようなものを認証なしで完全公開することはできません。また、安全にすることもできます。少なくとも私の知るところではない。 –