你如何在flash player中隐藏.flv文件的网址?

时间:2009-02-17 20:49:37

标签: php flash

我使用过期的网址来隐藏我在网站上使用的图片网址,这样他们只能在哈希的生命周期(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文件。

我可以通过替代方法解决这个问题或实现同样的目的吗?

5 个答案:

答案 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 ......