2016-04-19 8 views
0

ファイルのアップロードを許可するためにpresigned URLを使用して直接ブラウザアップロードを使用しています。これまでのところ、私はS3ファイルは特定の種類に限定されています

$s3 = App::make('aws')->createClient('s3'); 
$command = $s3->getCommand('PutObject', [ 
      'Bucket' => 'reminderuploadstest', 
      'Key' => "test.txt", 
     ]); 

     echo ((string)$s3->createPresignedRequest($command,'+100 minutes')->getUri()); 

を使用しています私はこのURLを使用してアップロードできるファイルの種類を制限する方法を知っていただきたいと思います。ユーザーが画像(例:jpg、png)のみをアップロードできるようにしたい。 amazonが「有効な」画像であるかどうかを確認することは可能ですか(つまり、拡張子だけではありません)。不可能な場合は、ユーザーが画像のみをアップロードするために何ができるのですか?それは私がそれが「有効」の画像である場合にAmazonが確認することは可能です直接ではなく、S3

答えて

2

をS3にいくつかのオンライン検証およびオーバー、プロキシを使用するアップロードの要件ですか(つまり、だけではない 拡張)。

はありません、それは私がユーザーのアップロードのみ 画像を確実にするために何ができるか、

その可能でない場合はできません。私はs3に直接アップロードし、のオンライン検証を使用せず、次にs3にプロキシする必要があります

あなたはできません。 S3に直接アップロードし、ファイルの内容に基づいてユーザーのアップロードを制限するという要件は、互換性がありません。これらの要件の1つを変更する必要があります。

ファイルをS3にアップロードして検証するまで待つことができる場合は、S3通知を使用してラムダ関数をトリガしてファイルを検証することができます。しかし、その時点でファイルはすでにアップロードされており、ブラウザはアップロードが成功したと考えます。

0

S3はリポジトリであるため、タイプバリデータビルドインはありません。

読み込みを行うフロントエンドのJavaアプレットローダーを投げてしまっても、ユーザーCPUを使用して何らかの検証と確認を行うことができます。

しかし、「コンテンツの長さの範囲」の制限がない場合でも、S3のすべてが悪用される可能性があります。ユーザーは単純にイメージヘッダーを挿入してアップローダーを騙し、S3スペースのGBを「借りる」ことができます。 XD。

もう1つの興味深い事実は、content-length-rangeは、最も強力なファイルバリデーターの1つで、ウイルス対策エンジンのファイルスキャナです。 ;-D。

関連する問題