如何从浏览器的右键菜单中禁用"视频另存为...",以防止客户下载视频?
是否有更完整的解决方案,防止客户直接访问文件路径?
你不能。这是因为浏览器的设计初衷就是这样的:提供内容。但*你可以让它更难下载。
首先,你可以*禁用contextmenu
事件,又称`右键"。这将防止你的普通滑稽演员通过右键点击和另存为公然翻录你的视频。但是,他们可以禁用JS并绕过这一点,或者通过浏览器的调试器找到视频源。此外,这也是糟糕的用户体验。在上下文菜单中,除了 "另存为",还有很多合法的东西。
你也可以使用自定义视频播放器库。他们中的大多数实现了视频播放器,可以根据你的喜好定制上下文菜单。所以你不会得到默认的浏览器上下文菜单。如果他们确实提供了一个类似于另存为的菜单项,你可以禁用它。但是,这又是一个JS的变通办法。弱点与前面的选项相似。
另一种方法是使用HTTP实时流来提供视频。它的本质是把视频切成几块,然后一个接一个地提供。这就是大多数流媒体网站提供视频的方式。因此,即使你设法 "另存为",你也只能保存一个块,而不是整个视频。使用一些专门的软件来收集所有的块并缝合它们,这将需要更多的努力。
另一种技术是在<画布>
上画`<视频>。在这种技术中,通过一点JavaScript,你在页面上看到的是一个<canvas>
元素在渲染一个隐藏的<video>
的帧。因为它是一个<canvas>
,上下文菜单将使用<img>
<的菜单,而不是<video>
<的。你会得到 "图片另存为",而不是 "视频另存为"。
你也可以利用CSRF令牌为你带来好处。你可以让你的服务器在页面上发送一个令牌。然后你使用该令牌来获取你的视频。你的服务器在提供视频之前会检查它是否是一个有效的令牌,或者得到一个HTTP 401。这个想法是,你只能通过拥有一个令牌来获取视频,而这个令牌只有在你来自页面而不是直接访问视频网址时才能得到。
在一天结束时,我只是将我的视频上传到第三方视频网站,如YouTube或Vimeo。他们有很好的视频管理工具,优化了设备的播放,而且他们努力防止他们的视频被翻录,而你却没有任何努力。