嵌入式视频iframe的域限制(JSP / Servlet)

时间:2014-07-07 06:27:20

标签: java javascript jsp iframe

我开发了一个视频共享门户解决方案,其功能类似于视频共享网站(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检查?

感谢。

2 个答案:

答案 0 :(得分:0)

使用临时视频URL 安全链接 )在特定时间段内限制客户端IP对视频的访问:< / p>

  • 显示视频的网站视频服务器交换共享的secretKey(在设置期间仅一次)。
  • 在服务器端呈现视频播放器的网站为要显示的视频生成临时URL ,受客户端IP 到期日期。服务器端会为每个客户端HTTP请求生成一个不同的临时URL。临时受限制的视频网址如下所示:https://videos.mysite.com/play/videoID/expirationDate/{hash}/
  • {hash}的计算方式为SHA256(secretKey + videoID + expirationDate + clientIP)
  • 视频服务器为请求的视频计算相同的{hash},并且仅在{hash}正确的情况下才提供视频流。

网站视频服务器都知道计算哈希所需的所有详细信息:

  • 客户端IP地址(从HTTP请求获取,然后作为参数传递到视频服务器)
  • 视频ID (作为参数传递)
  • secretKey (在设置过程中进行交换)
  • 到期日期(由网站作为当前日期和时间+ 4小时生成,然后作为参数传递给视频服务器)

nginx中的安全链接

上述视频链接保护机制被称为“ 安全链接 ”,并且是在 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不允许此域):

Domain-restricted video from Vimeo -> access denied

同时,视频所有者允许将此视频嵌入域Referer中。我们可以打开https://softuni.org,单击 [F12] 以显示Chrome DevTools,然后从该允许的域将视频w3schools.com代码注入HTML页面中的某个位置:

Injecting the Vimeo code in allowed domain using Chrome DevTools

现在视频可以正常播放,克服了域级访问限制:

Vimeo domain-level privacy bypassed using Chrome DevTools

请注意,这不能由网站开发人员轻松实现自动化,但是可以由具有技术专长的最终用户来完成。用户还可以使用浏览器插件来伪造 softuni.org HTTP标头,例如请参见"Referer Control" add-on(来自Chrome浏览器)。