3

我有几个音频文件,我不想让其他人访问它们。每个文件都位于主文件夹内的单独文件夹中,我现在将其称为“下载”。所以“下载”还有其他几个目录,每个目录里面都是音频文件。这些音频文件在系统上的网络应用程序中播放。

问题是现在任何人都可以输入文件的完整地址localhost/download/dir/sound.wav并播放音频文件。这就是我要防止发生的事情,我希望这些文件仅在它们被访问或从我们的应用程序流式传输时才流式传输。

我在 .htaccess 文件上尝试了以下操作

deny from all

这只是返回了一个403 forbidden页面,但我无法从应用程序中流式传输文件

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)localhost.com/.*$ [NC]
RewriteRule \.(mp3|wav)$ - [F]

这只是一起禁用了流并没有返回 403 或任何它只是没有从应用程序或直接访问流

最后,我使用 AJAX 调用保存要流式传输的文件的脚本;有什么我可以使用的选项吗?

4

3 回答 3

4

无法阻止用户访问这些文件

为了听到它们,必须将它们下载到用户的计算机上,这意味着它们必须可以访问!

您可以做的最好的事情是加密文件并在播放器中解密它们。但即便如此,播放器也可能被逆向工程,有人可以发现加密密钥和算法。最后你会发现你只是浪费了大量的处理时间,实际上减慢了你的申请速度!

于 2013-05-01T09:48:29.177 回答
0

只有一个问题:服务器应该如何检测谁请求了您的媒体 - 应用程序或其他系统,只是使用类似的协议?

但是如果你只是想阻止对你的媒体的最简单的http请求,你可能会涉及一些令牌交换系统,例如你的应用程序以某种格式发送媒体请求,服务器发送令牌来访问某个文件,然后你的应用程序可能会访问特殊的(比如php)脚本为其提供令牌,脚本返回您的声音流。这样,媒体可以被禁止从外部访问,只能由您自己的服务器端 php 脚本访问。

然后,为了获得对媒体文件的访问权限,用户需要知道您现有的令牌或您的交换协议,从而消除随机用户随意访问您的媒体。但是,正如您之前被告知的那样,可能没有办法防止“受过教育的用户”。

于 2013-05-01T10:06:30.893 回答
0

一种可能性是:

  1. 在该下载文件夹上添加 apache rewrite 指令以将所有请求路由到 php 脚本,而不是将请求的文件作为参数。
  2. 在您的应用程序中创建此脚本(例如 sound.php),该脚本将该文件路径作为获取参数。该脚本可以输出正确的 http 标头以指示数据类型是 wav 或任何您想要的。然后检查一些 cookie 或 token 或类似的,只有当用户有效时才直接输出受限文件的内容(见readfile )。
于 2013-05-01T10:17:25.320 回答