如何使嵌入式视频仅对特定播放器可用

How to make embeded videos only available to a specific player

我正在尝试弄清楚如何使嵌入式视频只能由特定播放器读取。这是上下文:

我有一个托管流媒体视频的网站。所有视频都是私人的。我的客户希望能够生成一个嵌入代码片段,使他能够 post 此视频到他想要的任何站点。 (最终这意味着视频流不再是私有的,而是现在 public)。

现在这是棘手的部分。客户 希望这些视频可以通过他们的 URL 进行扫描,这意味着如果视频 url 是 http://my.domain.com/videoToken,任何 bots/users/programs 点击 URL 将看不到视频,但是播放器需要从相同的 URL.

加载视频

有人知道我有哪些安全选项可以实现吗?有一些 DRM 解决方案,对这个用例有帮助吗?

提前致谢。

PS:如果由于某种原因这不可能,那么下一个最接近的是什么?

如果我们在 .htacces 文件中放入类似以下内容会怎样?

<IfModule mod_rewrite.c>
 RewriteEngine on
 RewriteCond %{HTTP_REFERER} ^http://(www\.)?my.domain\.com/.*$ [NC]
 RewriteRule .*\.(mp4|avi)$ http://www.my.domain.com/forbidden.mp4 [R,NC,L]
 # or serve a standard 403 forbidden error page
 # RewriteRule .*\.(mp4|avi)$ - [F,L]
</ifModule>

也许这不是解决方案,但可以开发使用 mod_rewrite 在 HTTP_REFERER 基础上控制视频访问的想法。

澄清一下,您的客户似乎想要;

  1. 能够将他们的视频嵌入任意网页并成功加载,而
  2. 使任意用户无法通过 URL.load/view 这些相同的视频。

这两个要求本质上是矛盾的。任何嵌入式 code/element 都必须从客户端浏览器向您的服务器发出请求,因此您将无法判断给定请求是来自加载嵌入式视频的用户,还是来自 bot/script/user 尝试直接从 URL 下载内容。 @ernestortiz 建议的方法可以防止随便浏览的用户和网络爬虫绊倒你的视频(如果你有 white-list 允许的推荐人,但这是一个完全不同的问题),但是 non-malicious 用户可能永远不会无意中发现您的视频,non-malicious 机器人会尊重 robots.txt。恶意用户可以伪造他们的引荐来源网址 header,而恶意机器人可以轻松配置为执行相同的操作。

问题的症结在于,如果没有每个嵌入视频的站点的 back-end 支持,您将不得不分发使用嵌入代码访问视频所需的代码,这样任何攻击者都可以访问它。因此,攻击者会确切地知道如何规避您制定的任何保护措施;你要给他们 proof-of-concept 这样做的代码。

除非你有黑名单,否则我不知道如何根据你的选择阻止请求,但你可以有一个 adds/changes 一些参数的脚本,所以 url 不完整机器人使用嵌入代码抓取网站。

我用youtube做了个例子:

JS

$('#embed').click(function(e){
  e.preventDefault();

  $(this).remove();

  var src = $('iframe').attr('src');

  $('iframe').attr('src', src + 'OAxm_GSM7L4?autoplay=1');

});

HTML

<div id="player">
<div id="embed"></div>
<iframe width="420" height="315" src="https://www.youtube.com/embed/" frameborder="0" allowfullscreen></iframe>
</div>

演示 https://codepen.io/anon/pen/bZAvYZ