具有 vimeo 域隐私和 <iframe> 的安全性

Security with vimeo domain privacy and <iframe>

在我们的应用程序中,用户可以订阅以访问 "premium videos"。我们使用 vimeo 来托管所有那些使用域保护设置的视频,该设置只允许我们的视频嵌入到特定域中。

我们的情况:
如果恶意用户订阅了一个月并使用该访问权限使用 Firebug、chrome 检查或其他类似工具获取所有私人视频 ID(大约 1500),他可以手动插入iframe 在我们的登录页面上,并且由于它位于 vimeo 允许的域中,因此私人视频将不受任何限制地播放。
利用被盗的 ID,他可以创建一个插件,可以在我们自己的网站上免费列出我们所有的私人视频 :(
这是一个代码示例,只要使用 chrome inspect:

插入视频,某人就可以使用它在我们的域上播放视频
<iframe src="https://player.vimeo.com/video/{any video ID including our domain protected ones}" width="640" height="640" frameborder="0" allowfullscreen=""></iframe>

我的问题:
有没有办法避免或使某人更难这样做?
我们可以想到的一个可能的解决方案是创建另一个域用作视频的域(避免使用与登录相同的域),但无论如何都可以在 chrome 的网络选项卡上获取该新域。

P.S:我不知道这是否相关,但我们正在使用 PhoneGap/Cordova 来开发应用程序。

经过研究和 vimeo 支持人员的一些回答后,我们找到了适合我们案例的解决方案。
由于没有办法阻止人们下载您的视频,如果他们可以访问您的视频,我们将策略从使用域保护更改为直接视频 link/url(您需要将您的 vimeo 帐户升级到 PRO 或 BUSINESS)。
当您获得直接视频 url(如 https://player.vimeo.com/external/..)并在浏览器中打开它时,它会将您重定向到临时 Url(来自 vimeo 的回答:"Both the files and download links are HTTP 302 redirects to the actual video file resources. The location of the actual video file resources expires every few hours, so make sure you always use the redirect links we provide.")。然后我们可以在 html5 视频标签中使用这个临时 url 并播放我们的视频。

备注:

  1. 如果用户窃取了我们的 urls 它只会工作几个小时,这样他就无法使用我们的 Url 建立我们的视频网站s.

  2. 不幸的是,具有一些网络知识的人可以使用该直接视频轻松下载视频link,但是由于我们无法避免下载视频,所以不会很大交易.

  3. 我们需要得到临时的url服务器端,因为我们不希望任何人访问原始的直接url(比如https://player.vimeo.com/external/..。) .


这是一个用 c# 编写的代码示例,它获取临时 url(基于 this):

  var url = "https://player.vimeo.com/external/...";
  HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
  webRequest.AllowAutoRedirect = false;  // IMPORTANT
  webRequest.UserAgent = "youruseragent";
  webRequest.Timeout = 10000;           // timeout 10s

  // Get the response ...
  using(var webResponse = (HttpWebResponse)webRequest.GetResponse()) {
    // Now look to see if it's a redirect
    if((int)webResponse.StatusCode >= 300 && (int)webResponse.StatusCode <= 399) {
      string uriString = webResponse.Headers["Location"];
      System.Diagnostics.Debug.WriteLine("Redirect to " + uriString ?? "NULL");
    }
  }