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. 这段代码是一个巨大的安全漏洞。您刚刚为任何愿意使用它的人打开了通往服务器的大门。
  2. 使用一组 mime 类型来确定扩展名之外的 mime 类型(尽管您需要额外的安全检查,因为仅在扩展名上中继并不是一件明智的事情)。
  3. 使用 switch 语句来确定使用哪个函数。切换后你应该有$url- 只有一个变量存储扩展,而不是两个不同的变量。
于 2013-02-06T14:14:16.340 回答