0

ブラウザで開くのではなく、ファイルを強制的にダウンロードするために使用している次のコードがあります。

if(isset($_POST['file_name'])){
$player_file = $_POST['file_name'];
$accessKey = "REMOVED";
$secretKey = "REMOVED";
$bucket = $_POST['bucket'];
$fname = $_POST['fname'];

$zip_url = el_s3_getTemporaryZipLink($accessKey, $secretKey, $bucket, $fname);
$mp3_url = el_s3_getTemporaryMP3Link($accessKey, $secretKey, $bucket, $fname);    


header('Content-type: audio/mpeg3');
header('Content-Disposition: attachment; filename="themixtapesite_'.$player_file.'"');
readfile($mp3_url);
exit();
}

ご覧のとおり、フォームからすべての変数を渡します。次に、その情報を使用して、Amazon S3 に保存されているファイルの一意の署名付き URL を生成します。

ファイルが MP3 の場合は $mp3_url を使用する必要があり、Zip ファイルの場合は $zip_url を使用する必要があります。

これは非常に単純でなければなりませんが、私は一日中この画面の前に座っていたので、完全に頭が真っ白になりました!

どんな助けでも感謝します。

4

1 に答える 1

2
  1. このコードは、1 つの巨大なセキュリティ ホールです。誰でも喜んで使用できるように、サーバーへの扉を開きました。
  2. MIME タイプの配列を使用して、拡張子のない MIME タイプを判別します (ただし、拡張子だけをリレーするのは賢明ではないため、追加のセキュリティ チェックが必要になります)。
  3. switch ステートメントを使用して、使用する関数を決定します。$url切り替え後は、2 つの異なる変数ではなく、拡張子を格納する 1 つの変数のみを使用する必要があります。
于 2013-02-06T14:14:16.340 に答える