我使用过期的网址来隐藏我在网站上使用的图片网址,这样他们只能在哈希的生命周期(1小时)内进行热链接。
我检查与文件url一起发送的散列,对照服务器上的散列,如果它们匹配,则脚本调用以下代码:
if (isset($_GET["hash"])) {
$this_min = date('Y-m-d-g',time()) . "salt" . $vid_id;
$current_hash = substr(md5($this_min),0,12);
$submitted_hash = mysql_real_escape_string($_GET["hash"]);
if ("$current_hash" == "$submitted_hash") {
$file_url2 = "directory/" . $vid_file;
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: inline; filename=\"".md5($vid_file)."\"");
readfile($file_url2);
exit;
} else {
$_SESSION["message"] = "Download link expired, refresh the page and try again";
$_SESSION["message_type"] = 0;
header("Location:" . $_SERVER['HTTP_REFERER']);
exit;
}
}
我在标签中使用它(例如,<img src="index.php?id=123&hash=ew6rg5reg4">
并且它完美地工作。如果图像是热链接的,当散列改变时,它将在每小时(或必要时分钟)停止工作。不幸的是,这当我使用它将.flv文件加载到flash播放器(例如JW播放器)时,同样的方法不起作用。没有加载.flv文件。
我可以通过替代方法解决这个问题或实现同样的目的吗?
答案 0 :(得分:2)
您无法真正隐藏下载网址。例如,Safari会公开通过“活动”窗口下载的所有资源。只需查找MB大小的项目,那就是你的FLV文件。
阻止人们翻录你的FLV的唯一方法是使用RTMP流,他们永远无法访问整个文件。
答案 1 :(得分:1)
您可以使用htaccess fils(仅限apache服务器)停止域名以外的推荐人
RewriteEngine On
Options +FollowSymLinks
<ifmodule mod_rewrite.c>
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain.com/.*$ [NC]
RewriteRule \.(gif|jpg|png|mp3|mpg|avi|mov|flv)$ - [F]
</ifmodule>
答案 2 :(得分:0)
知道播放器脚本会抛出什么运行时错误会很有趣吗?
您可能有更多机会将其设置为 video / x-flv 或 flv-application / octet-stream 的MIME类型。
答案 3 :(得分:0)
它也适用于JW播放器等。
某些服务器(例如nginx)具有非常有效地执行此类验证的模块,因此您无需在PHP中执行此操作。
答案 4 :(得分:0)
真正限制对flv文件的访问的唯一方法是在文件所在的服务器上实现一些ACL王或流式传输。 我正在使用Wowza Media进行实时视频流,服务器已经实现了几种保护文件/流的机制:基于ACL的身份验证,StreamNameAlias ......