我正在使用Flash播放器播放一些mp3文件。在Firefox,它正常加载它们,但在IE浏览器它没有。当我转到.mp3文件的URL时,它显示了mp3的源代码(而不是提供例如下载)。所以我用一个小脚本来解决它:
$url = $_GET['url'];
header('Content-type: application/force-download');
header('Content-Transfer-Encoding: Binary');
header("Content-disposition: attachment; filename=demo.mp3");
readfile($url);
我想问你以上是否安全。此外,服务器是否通过这种方式损失带宽?最后,它是否会影响服务器的资源? 感谢。
答案 0 :(得分:9)
不,那不安全。如果您在database.php
中输入了数据库密码并且database.php
输入了$_GET['url']
,那么您的脚本会将包含密码的PHP文件发送给我。
是的,这会占用带宽和一些服务器资源。
答案 1 :(得分:5)
这不安全,你不应该这样做。
除了安全隐含@ceejayoz概述之外,如果启用了allow_url_fopen
PHP设置,还可以将任何URL插入$url
。这样,您的服务器很容易被滥用来从其他服务器传输大量数据,并带来各种影响。
只有在真正需要时才应使用这种提供文件的方法。它比通过Web服务器请求静态资源消耗更多资源(因为必须启动昂贵的PHP进程)。
无论如何,在你的情况下都没有必要。听起来您的Web服务器没有提供正确的content-type
标头以及您的MP3文件。这就是你应该解决的问题。
也许,如果您使用的是Apache,请将.htaccess
文件添加到MP3所在的目录中,其中包含以下内容:
AddType audio/mpeg .mp3
已经解决了这个问题。如果没有,但force-download
的工作正常,请尝试
AddType application/force-download .mp3
答案 2 :(得分:2)
您实际的问题是,当您提供mp3文件时,您没有向客户端发送内容类型标头。确保在发送mp3文件的内容之前设置内容类型标题。
如果您是直接从Web服务器提供服务而没有脚本,则只需在Web服务器的配置中配置内容类型。
对于Apache,您可以在.htaccess文件中配置它:
AddType audio/mpeg .mp3
答案 3 :(得分:1)
是的,由于您没有验证/清理请求的文件路径,因此肯定存在安全风险。因此,请确保在将文件发送给用户之前进行检查!
虽然这将使用带宽和服务器资源,但它比定期下载文件要少得多。唯一的额外开销是处理/运行PHP。你可能不会注意到差异。