如何在网站上相对安全地提供视频服务

9
我正在提出一个与以下问题有些相关的问题: 安全地提供视频 安全流媒体视频 然而,没有人提供一个似乎与我的情况相关的答案。
我的情况如下: 我正在构建一个非常简单的学习管理系统。如果学生已经付费,他们就可以访问视频课程。我想要防止:
- 机器人/蜘蛛找到这些视频并下载它 - 其他人只需查看源代码,复制视频的URL并与其他人分享
我非常怀疑人们会试图黑客攻击网站来窃取视频。
如何最好地保护这些视频不被分享?我必须将视频存储在我的Web服务器上吗?我可以利用像YouTube或Vimeo这样的视频平台吗?
3个回答

19
简而言之,没有简单的解决方案。
我想说的是,如果有一种方法可以阻止人们下载视频,每个视频网站都会采用。
我想到了几种方法,列在下面,可以使学生/观众不值得下载视频。
  • 模糊URL
  • 频繁更改URL
  • 限制每个IP地址/子网的下载次数
  • 让他们在定制的“定制服务”视频播放器中观看
  • 使用已经可用的视频流媒体服务
每种方法都在下面进行了更详细的讨论。

模糊URL

您可以这样模糊URL:
http://mylearningmanagementsystem.com.au/e12d8cd38f00f204e9801998ecc8427e/video.flv

您可以计算文件名本身的哈希值(或加盐和哈希值,以上只是示例)并在URL中使用。

这可以通过一种方式实现,使它们足够难以理解,但仍然适合观众的书签和用户友好性。

如果你想再进一步,你可以将视频分成几个部分——这在定制部分中讨论。

经常更改URL

通过一些代码,您可以设置视频在每周日晚上11:59更改URL,以符合您的时区。然而,您链接到的任何页面都必须自动或手动更新,这本身就很麻烦(如何测试代码/如果它崩溃了而你没有意识到/诸如此类的事情)。

即使您做到了这一切,任何书签该页面的用户也会遭受 链接腐败

限制IP地址/子网的下载次数

通过一些花哨的服务器端代码,您可以限制视频可以被下载到一个IP地址(或根据用户情况,IP子网)的次数。

这不是我的强项,但您可以查看有关动态IP限制的文章。以下是网站上的摘录

根据以下标准之一对基于IP地址的请求进行动态阻止:

  • 并发请求的数量。
  • 在一段时间内的请求次数。

同时Drupal也可以这样做

让他们在自定义的“定制服务”视频播放器中查看

您可以走得更远,制作自己的视频管理系统(似乎您正在这样做),并从自己的服务器上提供视频(这就是我所说的定制服务),但某些尝试这样做的程序存在缺陷,例如索尼的CD管理软件像苹果iTunes的FairPlay DRM软件那样惩罚诚实的用户

如果您最终选择为用户提供观看视频的程序/网络服务并限制他们使用密码/加密密钥,可能会令已经诚信付款购买内容的客户感到恼怒。这基本上是所有版权保护系统都曾尝试过却彻底失败的,因为要么程序的安全性不够好,要么人们只是停止使用它,因为使用起来很麻烦。
当您向用户提供视频时,可以按章节将其分解成多个部分,例如第一章是一个视频,第二章是另一个视频,以此类推(如下所示):
http://mylearningmanagementsystem.com.au/video_title/chapter_01/video.flv
http://mylearningmanagementsystem.com.au/video_title/chapter_02/video.flv
http://mylearningmanagementsystem.com.au/video_title/chapter_03/video.flv

您可以将这个方法与第一节(隐藏URL)中的哈希思想相结合:

http://mylearningmanagementsystem.com.au/e12d8cd38f00f204/8fd3611c40e74c3d/video.flv
http://mylearningmanagementsystem.com.au/e12d8cd38f00f204/92d7f54d09c80436/video.flv
http://mylearningmanagementsystem.com.au/e12d8cd38f00f204/27bd98792bea3103/video.flv
这种方法也有缺点:
  • 那些在开始时暂停视频等待加载的低网速用户可能会遇到问题(现在这个问题不太常见,因为网络现在更快、更容易访问)
  • 如果缺失一个视频,整个视频将无法播放
  • 你将如何管理每个链接?每个视频名称将具有相同的哈希值还是不同的哈希值?
  • 你是否需要手动拆分每个视频?
关键在于,这确实会给你带来很多不必要的工作。下一个选择是使用已经可用的视频流服务。

使用已有的视频流服务

有很多选项可供选择以托管和共享您的视频。 YouTubeVimeo 就是其中两个选项。我将解释为什么我更喜欢后者。

  1. 密码保护

    如果您想与特定数量的付费用户共享视频,您可以在Vimeo上使用密码保护来保护视频。据我所知,YouTube不提供此服务-它只允许您选择成员查看视频。

    不仅如此,您可以将一堆视频添加到一个专辑中(在Vimeo中),并对该专辑进行密码保护,这样您只需更改专辑的密码即可。

    请注意,您可能会遇到更多的支持信息,例如“但这是当前密码还是上周的密码?”

  2. 设置嵌入式设置

    您可以使视频无法嵌入任何页面,以便用户必须直接访问Vimeo,在其Web浏览器中输入密码(如果您设置了密码),并查看视频。据我所知,您可以嵌入您可以查看的来自YouTube的任何视频。

请注意,快速的谷歌搜索可以发现有大量在线网站,如KeepVidDownloadVimeoClipConverter,它们允许您从这些视频托管网站下载视频。甚至有适用于FirefoxChrome浏览器的插件。
如果您的业务依赖于视频来实现盈利,并且您想进一步提高水平,那么有些付费流媒体服务专门从事内容分发、合理的访问权管理和内容保护。其中之一是Brightcove。以下是Brightcove的摘录:
Brightcove Video Cloud安全地提供最高质量的点播和直播视频体验,让您的观众无论身在何处都能观看。我们简化了对越来越复杂的设备和标准的传递,包括Web、移动设备和智能电视。
保护您珍贵的内容,确保视频安全。使用RTMPe流加密和SWF验证防止视频流窃取和内容盗窃,并确保您的视频流仅在授权播放器中播放。细粒度的访问控制,精确定位内容何时以及在何处显示,以符合内容许可限制,全球发布计划或安全防火墙传递。用户友好的图形界面使您可以通过日期、域、地理位置、播放器或IP地址限制访问。为了更好地控制,通过IP地址范围限制对敏感材料的访问,并确保内容仅从经批准的网络内部访问。
归根结底,如果您可以查看它,就可以下载它,无论您如何模糊不清。如果有一种方法可以阻止人们下载视频,那么每个视频网站都会这样做。
如果你有无限的资源,你可以结合上述所有技术,使它不值得任何人花时间。但是,尽管你付出了所有的努力,观众仍然可以设置许多屏幕捕获程序将所有视频记录到他们的硬盘驱动器上。
这取决于你,以及你想要对视频进行多么警惕。请记住,你花费的精力和时间使视频难以被复制,与使常规付费客户难以获取和使用内容成正比。
更多信息:

非常好的回答,感谢您的时间和努力!当然,人们总是可以截屏……就像撕裂DVD一样。但是这样做的障碍比用户简单地复制+粘贴URL或右键单击“另存为…”要高(需要知识、软件和时间)。我确实考虑过加密方法,类似于您提到的那些方法,但是我想不出任何解密后用户无法通过URL或单击轻松访问的方法……自定义播放器或流媒体可能是最好的选择……您是否知道除Brightcove之外的任何此类服务提供商? - oliver_siegel
当然,YouTube私人视频和Vimeo密码都可以使用 - 除非您计划设置一个自动化的、无需触摸的系统来达到大众市场... YouTube私人视频仅限于50人(此外:没有API访问),设置密码显然毫无意义。像Netflix的流媒体解决方案或类似YouTube / Vimeo的视频播放器的定制版本(将在服务器端获取视频URL并不显示给用户)是最好的选择。虽然YouTube + Vimeo已经有了DL工具 - 但必须先为我的利基站点编写一个...又是另一个障碍 :) - oliver_siegel
http://readwrite.com/2011/03/12/5-video-platforms-vying-to-be#awesm=~o95bRT0ty8CgH0 - oliver_siegel
1
您在这个链接中回答了关于其他提供商的问题。我已经进行了更多的搜索,但迄今为止还没有找到任何东西。 - eggy

3
也许有点晚了,但我把这里放在这里是为了帮助其他人。
正如其他人所述,一旦内容到达某人的计算机,就没有保护内容的方法。但我们可以通过设置一些屏障来防止内容的不受控制的共享。
我注意到许多网站都使用了一种方法,包括linkedin,pluralsight和许多其他网站,即使用授权信息保护的资源URL。这些令牌包括足够的信息以识别要提供的内容以及URL有效的时间范围。
假设您想要安全保护的视频是:example.com/videos/1234.mp4 下面是第一次请求资源时(在验证用户并进行其他验证后)生成令牌的示例:
validFrom = unixTimestamp
validTo = unixTimestamp
video = 1234.mp4
privateKey = yourSecretKey

token = HASH(validFrom.validTo.videoUrl.privateKey)

现在,使用上述信息(不包括私钥)创建一个URL。您的最终URL将类似于以下内容:

example.com/video?validfrom=1566831998&validto=1566839198&path=1234.mp4k&hash=HhgcWmRViYeQLn4AZoQvkVXotPU

现在,每当在路径 /video 上请求视频时,您将从url中获取所有参数(不包括哈希值),并按照相同的顺序与您的私钥一起使用这些参数创建哈希值。如果您刚刚生成的哈希值与URL中包含的哈希值匹配,则可以说该URL是有效且未被篡改的。这种技术也用于JWT身份验证,非常高效,因为您无需将信息存储到任何数据库中进行检索。这使得它非常快速和易于实现。
一旦您验证了令牌,就可以返回所请求的媒体的FileStream。

0

如果是一个小而不太动态的群体,那么YouTube或Vimeo可能是一个可行的选择。但它不具有可扩展性。 如果您拥有一个动态的受众群体,其中成员可能在不同的时间加入和离开,那么您需要在自己的服务器上对视频进行加密。 现在最大的挑战将是密钥分发。您需要拥有密钥方案,使每个用户都有唯一的密钥,但用于加密视频的密钥是相同的。 这里是一种可能的方法:https://sparrow.ece.cmu.edu/group/pub/old-pubs/elk.pdf 您可能还想查看其他算法:MARKS、LKH等。


YouTube无法使用,因为您总是可以看到视频链接,然后跟随它(除非您要求用户登录其YouTube帐户并授予他们访问私人视频的权限-但这太复杂了)。加密:是的!但是:一旦视频文件被解密,如何防止某人复制和共享它?或者如何通过点播流媒体在网站上播放视频,而不需要编写自己的视频播放器? - oliver_siegel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接