阻止用户查找链接

时间:2012-06-29 12:29:21

标签: php html hyperlink html5-video

我有一个视频,我正在我的服务器上存储。

我不希望人们在找到链接后查看该视频(查看来源)。

处理这种情况的最佳方法是什么?

谢谢, 丹尼

3 个答案:

答案 0 :(得分:4)

不要将其存储在您的Web根目录中。将其保留在Web根目录之外,并通过PHP文件引用它。该文件将对用户进行身份验证,以验证您是否希望他们能够查看视频并允许他们查看视频。否则,它将阻止视频加载或加载错误消息。

HTML:

<a href="video.php">Watch the video</a>

示例PHP(video.php):

<?php
    if (!isset($_SESSION['authenticated']))
    {
        exit;
    }
    $file = '/path/to/file/outside/www/secret.avi';

    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
?>

答案 1 :(得分:2)

您可能没有正确地表达您的问题,但我认为您正在寻找的是热链接预防,将其添加到您的.htaccess

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain.com/.*$ [NC]
RewriteRule \.(avi|mp4)$ - [F]

更有效的方法是使用一次性链接:

  • 请求托管视频的页面。
  • 生成一个随机字符串并将其存储在会话中并将其附加到链接`video.php?id = 10&amp; token = 9283y540983y45
  • 使用John Conde的方法限制直接访问并允许通过.php文件进行访问。
  • 在PHP文件中,通过与会话中的字符串进行比较,检查URL中的标记是否正确。

答案 2 :(得分:1)

另一种方法是以某种方式加密链接,如果您不想(或不能)使用身份验证,John在他的回答中建议的是什么。如果您的链接每小时都会发生变化,那么分享会非常困难。

如果您使用当前小时(和日期)中的md5哈希值,那么任何发现的链接在大约两小时后将无法使用。为什么两个?因为您应该在12:59:59生成链接时处理这种情况,所以当客户端的浏览器尝试访问资源时,该链接无效。为防止出现这种情况,您应该检查上一个小时是否与网址匹配,如果当前小时没有。

如果在URL中使用哈希太困难,您可能需要参数 - 并使用类似于John在其答案中所示的代码。

所以,场景看起来像这样

客户端提取页面。您的服务器需要在其中放置视频链接。它检查它是2012-06-29 14:55:30,将该日期视为2012-06-29T14:5_:__计算哈希值,并提供如下网址:href="/videos/736453273dh367d52gs82/movie.mpg"

客户端的浏览器会下载资源,因此您的服务器会收到包含这些奇怪数字的URL请求。您的服务器检查时间,发现它是2012-06-29 14:55:31。清除最后三位数(因为我认为一小时可能太多),并从2012-06-29T14:5_:__创建一个哈希值。它是否与客户端提供的URL匹配?是。然后提供文件。

如果URL不匹配,则服务器将时间减1,因此它会尝试编码2012-06-29T14:4_:__ - 如果它也不匹配,则返回错误代码。

因此,您的链接只能工作约20分钟。您可以决定哪个时间范围对您的需求有益。但请记住 - 获得该链接的任何人都可以在此期间使用它。还要小心你生成的哈希值 - 如果那只是时间,那么你冒险认为该方案是可猜测的。使用一些随机 salt ,但请记住,生成 URL的页面和检查 URL的页面必须相同。