文件下载预防

时间:2011-05-30 06:25:34

标签: php download

我有一个项目,客户将他的歌曲上传到网络,然后在网站上播放。

有许多工具允许下载各种媒体,即使它被认为是隐藏的等等。其中一个工具是Firefox的DownloadHelper插件。

如何阻止此类工具下载媒体文件?但是,我应该可以在前端自由使用这些文件用于促销目的。

提前致谢!

4 个答案:

答案 0 :(得分:2)

使用HTTP / HTTPS以外的内容来流式传输音频。可能是RTSP / RTMP。您可以将Flash播放器用作后者的前端。

答案 1 :(得分:1)

你做不到。如果他们可以看到/观看/听到它,通常它已经在用户的计算机上。

他们也可以随时录制他们的音频流。

也许尝试使用30秒样本或低比特率版本。

答案 2 :(得分:1)

有许多尝试阻止这种下载,要么将媒体文件切片成多个块,一次只流一个,要么在文件和客户端之间添加Flash层。像Hulu这样的服务也有阻止视频下载的强大实现。

一般而言,开发这种类型的系统非常耗时,并且通常需要大量的云容量才能实现。在一天结束时,无论如何都不会100%安全,也许最好通过额外的Flash工作或其他插件来限制他们的访问。

答案 3 :(得分:1)

1)RTMP而不是HTTP(即,从服务器流式传输音频/视频数据而不是下载文件);您将需要服务器上的FMS,Red5或类似软件;这仍然可以通过使用RTMP流媒体和/或线路输出记录器进行记录。

2)添加一些基于会话的唯一标识符,以便同一个URL只能访问一次文件(或RTMP情况下的流);相同URL的下一个请求将无效。例如,在您的PHP文件中,设置

$_SESSION['file_unique_stuff'] = rand(1000000, 9999999);
<a href='<?php echo "file.php?file_id={$file_id}&amp;unique_stuff={$_SESSION['file_unique_stuff']}"; ?>'>file</a>

然后在将内容传递给客户端(file.php)的文件中:

if ( empty($_GET['unique_stuff']) || empty($_SESSION['file_unique_stuff']) || $_GET['unique_stuff'] != $_SESSION['file_unique_stuff'] ) ) {
    header("Status: 404 Not Found");
    exit;
}
// session's "unique stuff" is validated and is not needed anymore
unset($_SESSION['file_unique_stuff']);
// pass file to client
//...

为获得最佳效果,请结合使用这两种方法。对每个文件执行此操作,即,您可能会有一系列“唯一内容”($_SESSION[$file_id]['unique_stuff'])而不是单个值($_SESSION['file_unique_stuff'])。

您还可以通过将file_id链接到会话中的某个随机哈希值来完全隐藏$_SESSION[$hash] = $file_id,即存储?hash={$hash}并使用网址{{1}}。

这不是100%安全,但这是您在网络上可以做的最好的,因为没有办法确保用户不使用任何第三方工具。