【问题标题】:How to serve videos in a website somewhat securely如何安全地在网站上提供视频
【发布时间】:2022-04-12 20:38:22
【问题描述】:

我在问一个与这些有点相关的问题:

Secure way of serving videos

secure streaming of videos

但是,没有人提供似乎与我的情况相关的答案。

我的情况如下: 我正在构建一个非常简单的学习管理系统。如果学生付费,他们可以访问视频课程。我想阻止:

  • 机器人/蜘蛛无法找到这些视频并下载它
  • 供人们简单查看源、复制视频的网址并与其他人分享

我怀疑很多人会尝试入侵该网站来窃取视频。

保护这些视频不被分享的最佳方法是什么?我必须将视频存储在我的网络服务器上吗?我可以利用 youtube 或 vimeo 等视频平台吗?

【问题讨论】:

    标签: security video download streaming video-streaming


    【解决方案1】:

    长话短说,没有简单的解决方案。

    我会直截了当地说,如果有办法阻止人们下载视频,那么每个视频网站都会这样做。

    我已经想到了一些方法(如下所列),您可以采取哪些措施使学生/观众不值得下载视频。

    • 隐藏网址
    • 经常更改网址
    • 限制每个 IP 地址/子网的下载次数
    • 让他们在定制的“定制服务”视频播放器中观看
    • 使用已有的视频流服务

    下面将更详细地讨论每一个。

    隐藏网址

    您可以像这样隐藏 URL:

    http://mylearningmanagementsystem.com.au/e12d8cd38f00f204e9801998ecc8427e/video.flv
    

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

    这可以通过这样一种方式来实现,即它们足够晦涩,但对于观众来说仍然是可收藏的和用户友好的。

    如果您想更进一步,您可以将视频分成几部分 - 这将在定制部分中讨论。

    经常更换网址

    使用一些代码,您可以将视频设置为每周日晚上 11.59 点更改您所在时区的 URL。但是,您链接到的任何页面都必须自动或手动更新,这本身就是一个麻烦(您如何测试代码/如果它跌倒而您没有意识到/类似的事情)。

    即使您完成了所有这些工作,任何为该页面添加书签的用户都会受到link rot 的影响。

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

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

    这不是我的强项,但您可以查看Dynamic IP Restrictions 上的文章。以下是网站的摘录

    根据以下任一条件动态阻止来自 IP 地址的请求:

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

    还有doing the same with Drupal的可能。

    让他们在定制的“定制”视频播放器中观看

    您可以加倍努力,制作自己的视频管理系统(看起来就是这样),并从您自己的服务器提供视频(我的意思是定制服务),但有些程序有尝试此were flawed like Sony's CD management softwarewere punishing honest users, like Apple iTunes' FairPlay DRM software

    如果您最终采取了为用户提供程序/网络服务来观看视频并将其限制为密码/加密密钥的方式,您可能会惹恼那些善意为您的内容付费的客户。这基本上是所有版权保护系统都尝试过但完全失败的原因,因为要么该程序没有得到足够好的保护,要么人们只是因为使用起来很尴尬而停止使用它。

    当您将视频提供给用户时,您可以将它们分解并按章节分开,因为第一章是一个视频,第二章是另一个视频,依此类推(如下所示):

    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 上使用密码保护您的视频。 AFAIK,YouTube 不提供此服务 - 它只允许您选择成员来观看视频。

      不仅如此,您还可以将一堆视频添加到相册(在 Vimeo 中),并为相册设置密码保护,因此您只需更改相册的密码。

      请记住,您可能会遇到越来越多的支持消息,例如“但这是当前密码还是上周的密码?”

    2. 设置嵌入设置

      您可以使视频无法嵌入任何页面,这样用户就必须直接进入 Vimeo,输入密码(如果您在上面设置了密码),然后在他们的网络浏览器中查看。 AFAIK,您可以嵌入任何您可以查看的 YouTube 视频。

    您必须记住,快速的 Google 搜索显示 there are heaps of online sites 允许您从这些视频托管网站下载视频。甚至还有 FirefoxChrome 的浏览器插件。

    如果您的企业依赖您的视频来实现盈利,并且您想更进一步, 有专门从事内容分发的付费流媒体服务,具有适当的访问权限管理和内容保护。其中一项服务是Brightcove。 Brightcove 的摘录如下:

    Brightcove Video Cloud 安全地提供最高质量的点播和直播视频体验,以覆盖您的观众——无论他们身在何处。我们简化了向网络、移动和联网电视日益复杂的设备和标准生态系统的交付

    ...和...

    保护您的宝贵内容

    确保您的视频安全。使用 RTMPe 流加密和 SWF 验证来防止视频流翻录和内容盗用,并确保您的视频流仅在您的授权播放器中播放。

    细粒度的访问控制

    准确确定显示内容的时间和地点,以遵守内容许可限制、全球发布计划或安全的防火墙后交付。用户友好的图形界面允许您按日期、域、地理、播放器或 IP 地址限制访问。为了获得更大的控制权,通过 IP 地址范围限制对敏感材料的访问,并确保内容只能从经批准的网络中访问。

    在一天结束时...

    如果你能看到它,你可以下载它,不管你多么模糊它。

    如果有办法阻止人们下载视频,那么每个视频网站都会这样做。

    如果您有无限的资源,您可以结合上面列出的所有技术,让它不值得任何人花时间。但是,在您付出所有努力之后,观众总是可以设置许多屏幕捕获程序之一,将所有视频录制到他们的硬盘上。

    这取决于您对视频的警惕程度。请记住,您花费的精力和时间使视频更难翻录,这与普通付费客户获取和使用内容的难度成正比。

    更多信息:

    【讨论】:

    • 很好的答案,感谢您的时间和精力!!当然,一个人总是可以捕获屏幕......就像翻录 DVD 等一样。但是这样做的障碍(知识、软件和时间)比用户简单地复制 + 粘贴 url 或右单击“另存为...”我确实考虑了加密方法,类似于您提到的那些,但无法想出任何解密后用户无法再次通过 url 轻松访问或单击...自定义服务的方法播放器或流媒体可能是最好的选择...您是否知道除了 Brightcove 之外的任何此类服务提供商?
    • 当然 youtube 私人视频和 vimeo 密码都可以使用 - 除非您计划设置一个自动化的、无触摸系统以进入大众市场...... youtube 私人视频限制为 50 个人(此外:没有 API 访问权限)设置密码显然没有意义。流媒体解决方案,例如来自 netflix 的解决方案,或自定义版本的 youtube / vimeo 之类的视频播放器(它将获取视频 url 服务器端而不向用户显示)将是最好的。虽然 youtube + vimeo 已经制作了深度学习工具 - 有人必须首先为我的利基网站编写一个程序......另一个障碍:)
    • 您回答了有关其他提供商in that link 的问题。我做了更多的搜索,但到目前为止还没有找到任何东西
    【解决方案2】:

    也许有点太晚了,但我把它放在这里是为了帮助其他人。

    正如其他人所说,一旦内容到达某人的计算机,就无法保护内容。但是我们可以通过设置一些障碍来防止不受控制地共享内容。

    我注意到许多网站(包括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。您的最终网址将是这样的:

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

    现在,每当对路径 /video 的视频发出请求时,您都会从 url 中获取所有参数(不包括哈希),并像之前一样从参数和您的私钥创建一个哈希以相同的顺序。如果您刚刚生成的散列与 URL 中包含的散列匹配,则可以说该 url 是有效且未经调整的。在 JWT 身份验证中使用了相同的技术,并且非常有效。因为您不必在任何数据库中存储或检索信息。这使得它非常快速且易于实施。

    验证令牌后,您可以将 FileStream 返回到 url 中请求的媒体。

    【讨论】:

      【解决方案3】:

      如果它是一个小型且不太动态的组,那么 youtube 或 vimeo 可能是一个可能的选择。但它不可扩展。 如果您有一个动态的观众群,成员可能会在不同的时间加入和离开,那么您需要在您自己的服务器上加密视频。 现在最大的挑战将是密钥分配。您需要具有密钥方案,以便每个用户都有一个唯一的密钥,但用于加密视频的密钥是相同的。 这是一种可能的方法:https://sparrow.ece.cmu.edu/group/pub/old-pubs/elk.pdf 您可能想要查看的其他算法有:MARKS、LKH 等。

      【讨论】:

      • youtube 不起作用,因为您始终可以看到视频的链接,然后关注它(除非您要求用户登录他们的 youtube 帐户,并允许他们访问私人视频 -但这太复杂了。)。加密:是的!但是:一旦视频文件被解密,你如何防止有人复制和分享它?或者您如何通过点播流媒体在网站上播放视频,而无需编写自己的视频播放器?
      猜你喜欢
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 2020-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多