繁体   English   中英

Amazon S3强制MP3文件下载绕过Web服务器

[英]Amazon S3 force MP3 file download bypassing web server

我一直在尝试寻找一种从Amazon S3强制下载MP3文件的方法,但是我发现的所有实现都将通过Web服务器示例传递文件:

S3->我的Web服务器->客户端。

如何链接到Amazon S3上的文件,该文件将直接从Amazon s3进行下载而无需通过我的Web服务器?

您的答案是HTML 5

<a href="$download_link" download="$file_name">Click Me</a>

这迫使浏览器将文件保存为“保存”

您需要设置S3对象的这些元数据:

Content-Type: "application/octet-stream"
Content-Disposition: "attachment"

有时仅设置Content-Disposition就足够了。 您也可以从S3控制台或通过AWS Api执行此操作。

您可以直接引用上传到Amazon S3存储桶的任何对象,就像它本身是Web服务器一样。

例如,如果您的存储桶名称为xyz100,并且您上载了名为music.mp3的mp3,则可以使用以下链接格式直接从S3下载它:

https://s3.amazonaws.com/xyz100/music.mp3

您知道可以通过基于Web的Amazon Web Services控制台或使用任何免费软件工具将对象/文件上传到S3。

将对象上载到S3后,可以为对象指定ACL或安全策略。 默认情况下,对象是私有对象,如果您尝试如上所示访问文件,则会收到拒绝访问错误消息。

解决此问题的第一种方法是将对象公开,从而消除了url本身中任何特殊签名的需要。 但是,如果您认为文件可能因高带宽下载而被滥用,或者在其他人的网站上进行了深链接,则将对象公开会成为一种风险。

第二种方法是将对象保留为私有,并创建包含签名的直接URL。 这需要更多的技巧,但是有一些PHP工具箱可以轻松为您创建签名的链接,包括Amazon提供的工具箱。 否则,Amazon S3 Web控制台允许您创建签名的链接。

关于已签名链接的最重要的事情是,您可以指定链接过期的时间。 这可以是一个救生员,因为您可以动态创建链接,例如,链接将在30分钟后失效。 这有助于防止滥用和深度链接,但这当然是公开使用私有S3对象的最复杂方式,当然也需要服务器。

尽管从技术上来说,可以让某种类型的客户端JavaScript为您的链接签名,但是客户端代码将需要包括您的访问密钥和秘密密钥,这将是一个主要的安全漏洞,无论您对其进行多大程度的混淆。 规则#1,永远不要创建任何杂乱无章的物品,包括您的亚马逊钥匙,无论它们多么混乱。

然后是上面的对象的直接url是私有的并且需要签名的示例:

https://s3.amazonaws.com/xyz100/music.mp3?Expires=1687832834&Signature=GTje51Mo47BfkGqS1gO0Ns%2FrHUk%3D

您不需要通过Web服务器传递对象的实际数据,可以使用上述详细方法向任何用户发出指向S3的直接链接。 请注意,为确保在上载时正确设置Content-Type,大多数工具会自动执行此操作。 如果设置不正确,该文件将无法正确打开。 例如,这是控制图片下载和保存(错误的Content-Type或默认二进制类型)还是仅在浏览器中显示(正确的Content-Type)的控件。

祝你好运,希望这会有帮助。

将文件公开,您不需要任何类型的AWS客户端库即可访问它。 您可以使用选择的文件检索机制来获取文件。

您需要更改内容类型。 在S3控制台中,右键单击对象,然后选择“属性”,然后在“元数据”下。 您也可以通过编程方式执行此操作: http : //docs.amazonwebservices.com/AWSSDKforPHP/latest/index.html#m=AmazonS3/change_content_type

<?php
$file = $_GET['file'];
header ("Content-type: octet/stream");
header ("Content-disposition: attachment; filename=".$file.";");
header("Content-Length: ".filesize($file));
readfile($file);
exit;
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM