我开发了一个视频共享门户解决方案,其功能类似于视频共享网站(youtube,dailymotion),可以生成可以嵌入到您网站上的iframe HTML代码。
例如:
<iframe width="521" height="391" src="http://192.168.1.3/vidsolution/public/portal/embed/UlNBX0VuY3J5cHRpb25fMi5tcDQ=" frameborder="0" scrolling="no" allowfullscreen></iframe>
所以我想了解如何实现域名限制,iframe只会向玩家展示iframe是否嵌入在授权域名中?
我发现你可以使用javascript检查父网址:
Link: access parent url from iframe
这是进行域名检查的最可靠方式吗?任何不涉及Javascript的替代方案,即使用JSP / Java Servlet检查?
感谢。
答案 0 :(得分:0)
使用临时视频URL ( 安全链接 )在特定时间段内限制客户端IP对视频的访问:< / p>
secretKey
(在设置期间仅一次)。https://videos.mysite.com/play/videoID/expirationDate/{hash}/
{hash}
的计算方式为SHA256(secretKey + videoID + expirationDate + clientIP){hash}
,并且仅在{hash}
正确的情况下才提供视频流。网站和视频服务器都知道计算哈希所需的所有详细信息:
上述视频链接保护机制被称为“ 安全链接 ”,并且是在 nginx安全链接模块中即时实现的:
这样的实现是高度安全,几乎不可能被绕过(除非客户端下载视频并将其上传到其他地方),但是它涉及网站上的服务器端逻辑< / strong>,它会显示视频。
Amazon S3,Facebook视频和许多CDN网络使用类似的基于“ 安全链接 ”的访问限制。
如果您要跳过服务器端逻辑,并将“ 安全链接”解锁逻辑封装在易于嵌入的JavaScript视频播放器中,则可以在您的客户端JavaScript代码中为视频生成临时的安全链接,但是攻击者可以对代码进行反向工程并显示密钥。
我不是纯粹在客户端安全地实现安全链接生成的方法。
答案 1 :(得分:0)
大多数视频服务器使用 Referer
HTTP标头来实施域级别限制,以访问受域保护的嵌入式视频。
此不能轻易在客户端被欺骗,因为现代的Web浏览器不允许从客户端JavaScript {{}更改 Referer
HTTP标头 1}}(AJAX)调用。
当心:基于 fetch
HTTP标头的域限制可以绕过服务器端脚本,该脚本会请求带有欺骗性视频HTTP引荐来源网址,并将其重新传输到客户端(作为代理)。
例如,Vimeo视频的“ 域级隐私”可以通过服务器端代码绕过,该代码伪造了 {{1} } HTTP标头和服务器端HTTP请求中的相关cookie。
观看域级受限视频(如果有URL)的一种简便方法是在客户端允许的HTML页面中使用视频播放器代码的客户端注入(使用Chrome DevTools)
我们来看一个示例。我们在Vimeo中有一个受域限制的视频,该视频无法嵌入到Referer
域中(Vimeo不允许此域):
同时,视频所有者允许将此视频嵌入域Referer
中。我们可以打开https://softuni.org,单击 [F12] 以显示Chrome DevTools,然后从该允许的域将视频w3schools.com
代码注入HTML页面中的某个位置:
现在视频可以正常播放,克服了域级访问限制:
请注意,这不能由网站开发人员轻松实现自动化,但是可以由具有技术专长的最终用户来完成。用户还可以使用浏览器插件来伪造 softuni.org
HTTP标头,例如请参见"Referer Control" add-on(来自Chrome浏览器)。