.htaccess .mp4 盗链移动视频无法播放

.htaccess .mp4 hotlinking mobile video doesn't play

你好所以我有一堆视频,用户只能在带有 html5 标签的 videos.php 页面上看到。当您直接访问 mp4 文件时,它应该将您重定向到主页。使用下面的代码可以正常工作。

我使用了这段代码:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mydomain.com [NC]
RewriteRule \.(mp4)$ - [NC,F,L]

然而,在任何移动设备上重定向都有效,但在我实施新规则后视频停止播放。所以我从某个地方找到了这段代码,希望它能起作用:

# for android/ipad/iphone/BlackBerry/Nokia/Samsung/Windows Phone
RewriteCond %{HTTP_USER_AGENT} !(Android|iPad|iPhone|BlackBerry|Nokia|SAMSUNG|Windows\ Phone)

仍然不走运,移动和桌面上的热链接都可以工作,但在移动设备上视频文件无法播放。我已经恢复到原来的代码:

RewriteEngine on   

RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mydomain.com [NC]
RewriteRule \.(mp4|jpg|gif)$ - [NC,F,L]

如果有人能帮助我理解为什么视频不能播放盗链,我将不胜感激!

因此,在尝试了所有方法之后,我找到了解决问题的办法。我没有使用 .htaccess,而是执行了以下操作:

为您的视频创建一个唯一的文件夹名称。例如KV93BGYFQW9024J 所以 url 会出现在视频中:(可能你可以每天重新创建它,将其保存在数据库中作为参考)

mydomain.com/KV93BGYFQW9024J/video.mp4

现在创建一个 php 文件,如下所示:

<?php
        $video = "video.mp4" //Video name can be retrieved from database using a token passed to this page

    $auth=true; // Authentication can be done here;

    if($auth){
        $path = "KV93BGYFQW9024J/";
        header("Content-type: video/mp4");
        header("Content-Length: ".filesize($path)); // provide file size
        header("Expires: -1");
        header("Cache-Control: no-store, no-cache, must-revalidate");
        header("Cache-Control: post-check=0, pre-check=0", false);
        readfile($path);
    }else{
        echo "Not Authenticated";
    }
?>

最后在实际页面上你可以看到这个

<video id="example_video_1" controls preload="none" autoplay="false" >
      <source src="video.php?id=ISHF298YFGY25H01" type='video/mp4' />  
</video>

令牌应引用视频的名称。我知道这只是一次尝试,但有助于避免偷偷摸摸的用户嗅出其他视频。总而言之,未经身份验证您无法直接访问视频,如果您确实设法获得了文件夹,您可以提到根据视频长度每 1-12 小时随机重新生成一次名称。

如果其他人可以给我更好的解决方案,我们将不胜感激。这将有助于现在我仍然看到该文件夹​​,即使每 2 小时(在我的情况下)随机生成一个名称也是一个安全漏洞。

谢谢

哦,是的,这里的问题要归功于我的一个朋友,该文件将完全加载到服务器 ram 中,这意味着如果您有一个 20mb 的文件,整个文件将加载到 ram 中,然后流式传输给用户。如果你有 1000 个并发连接,你会 运行 内存不足。任何关于此主题的补充也将不胜感激。