防止直接访问mp3 / wav文件,同时允许Flash播放器使用.htaccess(或PHP)访问它们

时间:2010-08-04 19:06:29

标签: php security apache .htaccess flash

如何阻止直接访问/下载到mp3 / wav文件,同时允许Flash播放器使用.htaccess(或PHP)访问它们?我一直在寻找一种解决方案,只有部分和无效的解决方案才能显示出我的努力。

下面的解决方案起初似乎是一个很好的修复,但它也阻止我的Flash播放器访问文件。 我是否只允许从特定网页进行访问?

< Files ~ ".*\..*"><br />
order allow,deny<br />
deny from all<br />
< /Files>

下面的解决方案起初看起来很棒,因为它不允许人们查看目录中的文件,但如果用户知道音乐文件的确切URL,他们可以下载它:

SetHandler application/x-httpd-php<br />
SetHandler application/x-shockwave-flash

现在,我遇到this post迫使用户生成用户名和密码using htaccess,但在Flash播放器屏幕上弹出对话框。 页面是否有办法在用户不做任何事情的情况下发送登录信息?


如果这不是一种安全的方法,有人可以提出一种实施此限制功能的安全且相对直接的方法吗?我们非常感谢网址和示例

P.S。这是一个WordPress站点,因此,我将使用 PHP 作为编程语言来实现任何解决方案。

P.S。希望阻止新手下载,而不是黑客/破解者/互联网向导。

4 个答案:

答案 0 :(得分:8)

由于PHP可用,因此使用它来保护文件。不要在Web根目录中包含它们,而是PHP可以访问的地方。然后生成一次性使用的URL,如:

<?php
  $unique = md5( uniqid() );  // 32 hex characters
?>

然后将该唯一值存储在session / server / db中,并让其他页面在流式传输文件之前验证唯一字符串:

<a href="streamer.php?id=6dd4566eb245627b49f3abb7e4502dd6">Stream Me</a>

确保在第一次使用后使该唯一令牌失效(或者如果您感觉很慷慨,可能会过几次)。它不会阻止顽固分子捕获HTTP流,但它应该阻止随意链接。

答案 1 :(得分:3)

正如鲁克所指出的那样,你无法双管齐下。您既不能同意也不能让您的用户访问您的数据。无论您的身份验证方案变得多么复杂,有能力的用户总是能够绕过它,因为为了让Flash播放器正常运行,他们必须拥有凭据。就个人而言,我认为正确的解决方案是认识到您无法阻止确定的用户保存您的内容并让他们放弃。如果你坚持让它变得更加困难,那么适合你的解决方案将取决于你想要对哪些用户有效,以及你愿意投入多少工作。

一个简单的解决方案是每次提供一个查看器页面时生成一次性密钥,然后通过检查它的PHP脚本提供内容。这样,用户至少必须为他们想要的内容加载查看器页面并检查其来源以提取密钥,而不是仅将URL放入其浏览器的地址栏中。但是,如果您的网站变得非常受欢迎,则某人可能会提供自动执行此操作的脚本。例如,请参阅下载YouTube视频的Python脚本youtube-dl

在你的帖子中,你提到用Apache保护文件的密码。有可能让Flash播放器应用程序提交HTTP身份验证,但我怀疑任何现有的播放器都支持这种情况,并且修改一个这样做会需要使用ActionScript的资源和经验。任何解决方案都能在阅读页面源这些微不足道的攻击中幸存下来,可能需要修改播放器。

答案 2 :(得分:0)

有人总能看到他们正在运行Flash并能够下载您的音乐。 TamperData可用于查看浏览器生成的所有流量(包括闪存),并能够重放,拦截和修改所有请求。 Flash很容易反编译,但这可能不是必需的。

您唯一能做的就是提高标准并防止直接链接到您的内容。您可以使用PHP来限制对媒体的访问。将所有媒体放在Web根目录之外,或使用.htaccess deny from all保护目录。让Flash应用程序首先发送“下载请求”,为flash应用程序提供一个临时的单一使用令牌(cryptographic nonce)。然后在下一个请求中使用此令牌从PHP文件下载音乐。这很容易愚弄,但它是你能做的最好的。

答案 3 :(得分:-1)

还有另一种解决方案,尝试并且非常成功:将歌曲加载到<iframe>。 PHP代码将限制对歌曲的直接访问。