如何从浏览器的右键菜单中禁用“将视频另存为…”以防止客户端下载视频?
是否有更完整的解决方案可以防止客户端直接访问文件路径?
那是因为这就是浏览器的设计目的:提供 内容 。但是你可以 让它更难下载 。
我只是将我的视频上传到第三方视频网站,如 YouTube 或 Vimeo。他们有很好的视频管理工具,优化了设备的播放,并且他们努力防止他们的视频被你零努力地翻录。
您 可以 禁用该contextmenu事件,也就是“右键单击”。这将防止您的常规滑雪板通过右键单击并另存为来公然翻录您的视频。但随后他们可以禁用 JS 并绕过这个问题,或者通过浏览器的调试器找到视频源。另外,这是糟糕的用户体验。上下文菜单中有很多合法的东西,而不仅仅是另存为。
contextmenu
使用自定义视频播放器库。他们中的大多数都实现了根据您的喜好自定义上下文菜单的视频播放器。所以你没有得到默认的浏览器上下文菜单。如果他们确实提供类似于“另存为”的菜单项,您可以禁用它。但同样,这是一个 JS 解决方法。缺点与解决方法 1 类似。
另一种方法是使用HTTP Live Streaming提供视频。它本质上所做的是将视频切成块并一个接一个地提供。这就是大多数流媒体网站提供视频的方式。因此,即使您设法另存为,您也只能保存一部分,而不是整个视频。收集所有块并使用一些专用软件缝合它们需要更多的努力。
另一种技术是<video>在<canvas>. 在这种技术中,使用一点 JavaScript,您在页面上看到的是一个<canvas>元素,它从隐藏的<video>. 因为它是 a <canvas>,所以上下文菜单将使用<img>‘s 菜单,而不是<video>‘s 。您将获得图像另存为而不是视频另存为。
<video>
<canvas>
<img>
你也可以使用CSRF 代币来发挥你的优势。你会让你的服务器在页面上发送一个令牌。然后,您使用该令牌来获取您的视频。您的服务器会在提供视频之前检查它是否是有效令牌,或者获取HTTP 401。这个想法是,您只能通过拥有一个令牌来获取视频,如果您来自页面,而不是直接访问视频网址,您才能获得该令牌。