在我们的应用程序中,用户可以订阅以访问“优质视频”。我们使用 vimeo 使用该域保护设置来托管所有这些视频,该设置仅允许我们的视频嵌入到特定域中。
我们的情况:
如果一个不怀好意的用户订阅了一个月,并使用该访问权限使用 Firebug、chrome inspect 或其他类似工具获取所有私有(private)视频 ID(大约 1500 个),他可以在我们的登录页面上手动插入一个 iframe,因为它是在 vimeo 允许的域上,私有(private)视频将不受任何限制地播放。
利用被盗的 ID,他可以创建一个插件,可以在我们自己的网站上免费列出我们所有的私有(private)视频:(
这是一个代码示例,有人可以通过使用 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 支持的一些回答后,我们找到了适合我们案例的解决方案。
由于无法阻止人们在有权访问您的视频时下载您的视频,因此我们将策略从使用域保护更改为直接视频链接/网址(您需要将您的 vimeo 帐户升级为 PRO 或 BUSINESS)。
当您获得直接视频网址(如 https://player.vimeo.com/external/.. 。)并在浏览器中打开它时,它会将您重定向到临时网址(来自 vimeo 的回答:“文件和下载链接都是 HTTP 302 重定向到实际的视频文件资源。实际视频文件资源的位置每隔几个小时就会过期,因此请确保您始终使用我们提供的重定向链接。”)。然后我们可以在 html5 视频标签中使用这个临时 url 并播放我们的视频。
笔记:
这是获取该临时 url 的 c# 代码示例(基于 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");
}
}
关于iframe - vimeo 域隐私和 <iframe> 的安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51567649/