在我们的应用程序中,用户可以订阅以访问“高级视频”。我们使用vimeo通过该域保护设置来托管所有这些视频,该设置仅允许将我们的视频嵌入特定域中。
我们的情况:
如果目标不佳的用户订阅了一个月并使用Firebug,Chrome chrome或其他类似工具使用该访问权限获取所有私有视频ID(大约为1500),则他可以在我们的登录页面上手动插入iframe,因为在vimeo允许的域上,私人视频将不受任何限制地播放。
然后,利用被盗的ID,他可以创建一个插件,该插件可以在我们自己的网站上免费列出我们所有的私人视频:(
这是一个代码示例,有人可以使用chrome inspect插入视频,从而在我们的域中播放视频:
我的问题:
有没有办法避免某人这样做或使其变得更难?
我们可能想到的一种可能的解决方案是创建另一个域作为视频域(避免使用与登录相同的域),但是仍然有可能在chrome的“网络”标签上获得该新域。
P.S:我不知道这是否相关,但我们正在使用PhoneGap / Cordova开发该应用。
答案 0 :(得分:2)
经过研究并获得了vimeo支持的一些答案,我们找到了适合我们情况的解决方案。
由于无法阻止人们访问它们,因此无法阻止他们下载视频,因此我们将策略从使用域保护更改为直接视频链接/ URL(您需要将vimeo帐户升级为PRO或BUSINESS)。
当您获得直接视频URL(例如https://player.vimeo.com/external/..。)并在浏览器中打开它时,会将您重定向到一个临时网址(来自vimeo的回答:“文件和下载链接都是HTTP 302重定向到实际的视频文件实际视频文件资源的位置每隔几个小时就会过期,因此请确保您始终使用我们提供的重定向链接。”)。然后,我们可以在html5视频标签中使用此临时网址并播放我们的视频。
注意:
如果用户窃取了我们的网址,它将只能工作几个小时,这样一来,他将无法使用我们的Urls用我们的视频建立网站。
不幸的是,具有一定网络知识的人可以使用该直接视频链接轻松下载视频,但是由于我们仍然无法避免下载视频,因此没什么大不了的。
我们需要获取临时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");
}
}