繁体   English   中英

防止直接文件访问

[英]Prevent direct file access

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

问题是,现在任何人都可以输入文件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来调用保存要流式传输的文件的脚本; 我可以使用任何选项吗?

不可能阻止用户访问这些文件

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

您可以做的最好的事情是加密文件并在播放器中解密它们。 但即使这样,玩家也可以进行逆向工程,有人可以发现加密密钥和算法。 最后你会发现你浪费了大量的处理时间,实际上减慢了你的应用程序!

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

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

然后,为了获得对媒体文件的访问权限,用户需要知道您现有的令牌或您的交换协议,这将消除随意用户随意访问您的媒体。 但是,正如您之前所说,可能无法防范“受过教育的用户”。

一种可能性是:

  1. 在该下载文件夹上添加一个apache重写指令,将所有请求路由到php脚本,而不是将请求的文件作为参数。
  2. 在应用程序中创建此脚本(例如sound.php),该脚本将该文件路径作为get参数。 此脚本可以输出正确的http标头,以指示数据类型是wav还是您想要的任何内容。 然后检查一些cookie或令牌或类似物,并仅在用户有效时直接输出受限文件的内容(请参阅readfile )。

暂无
暂无

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

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