2016-04-19 7 views
0

私はs3を使用して、ユーザーからのコンテンツを格納し、ソーシャルネットワークタイプのサービスでアクセスを管理する必要があります。Amazonで事前に署名されたURLは、特定の種類のファイルのみを許可しますか?

はこれまでのところ、これは私がやって考えてきたものである:

  1. クライアントはLAMPサーバーを伝え、彼はファイルをアップロードしたい
  2. LAMPは認証し、ユーザーがアップロードすることができS3用presigned URLを生成します。また、秘密鍵を使用してその鍵の暗号化バージョンを作成します。次に、このキーをmysqlテーブルで起動したユーザ(起動時とともに)に追加します。
  3. LAMPはキーと2からのデジタル署名をクライアントに送信します。
  4. クライアントはファイルをs3にアップロードします
  5. 終了後、彼はそのファイルが完了したことをLAMPに伝えます。鍵とデジタル署名を送信します。
  6. LAMPは、キーと署名の両方が一致していることを確認します。そうであれば、LAMPはクライアントが与えられた鍵について正直であることを知っています(そして彼はランダムに生成していません)
  7. LAMPはs3をチェックして、その鍵を持つファイルが存在する2.

で追加された行を削除私の質問は:上記データは、いくつかの重大な欠陥、非効率性を持っている

  • 流れていますか?
  • それはどのように変更することができるよう、私は十分ではありませんユーザーのみ.Iは拡張子だけをチェックすると信じて(PNG、JPG、PDFなどのような)のみ有効なファイルをアップロードすることが許可されていることを確認してください行う

答えて

0

私はwouldnクライアントがS3に直接アップロードできるようにしないでください。私はあなたのサーバーにファイルをアップロードします。そこでは、あなたがそれについての検証をすることができます(そして正しいです、a file extension check is not sufficient)。次に、ファイルの検証が完了したら、ファイルをS3に送信します。この方法では、プロセスの制御を放棄しません。

+0

2倍の帯域幅を節約できるため、私はダイレクトアップロードを行っています。私はサーバーにファイルをダウンロードしてからs3にアップロードする必要はありません。 –

+0

@harvey_slash大規模でない限り、私はそれをしません – Machavity

+0

EC2へのデータ転送は無料です。 EC2からS3へのデータ転送(同じ地域内にある場合)も無料です。また、EC2からS3へのデータ転送は非常に高速です。 –

0

ホイールを再発明しないでください。あなたが望むことをするために、細かいアップローダーなどを調べてください。また、独自に実装したい場合でもエミュレートできるフローを文書化しています(しかし、アップローダはうまく動作し、かなり安く、場合によっては無料です)。

関連する問題