如何防止从我的网站下载图像和视频文件?是否可以?最好的方法是什么?
27 回答
不,这是不可能的。
如果你能看到它,你就能得到它。
不要将它们发布到您的网站。
否则是不可能的。
图像必须下载才能被客户端查看。在许多情况下,视频都是类似的情况。您可以设置代理脚本来提供文件,但这并不能真正解决阻止用户获取自己的副本的问题。有关此主题的更深入讨论,请参阅问题如何防止/难以下载我的 Flash 视频?
由于浏览器需要传输内容来显示它(文本、图像、视频),当网站显示时,数据已经在客户端的计算机上。前面的答案几乎没有给出关于如何让没有经验的用户更难获取内容的建议。以下是一些方向:
- 一般的
- 用透明或透明图像覆盖相应的内容
<DIV>
(如该问题的一些答案中所述) - 在框架集中打开网站,因此保存可能会丢失框架内容。
- 打开网站通过
window.open()
隐藏菜单栏。 - 通过 JavaScript 禁用右键单击(不推荐,因为对可用性的所有副作用)
- 通过 JavaScript 从另一个文件(可能会检查特定的引用者或可能是 ROT13)加载页面的 HTML 代码,因此更难访问源代码。
- 告诉浏览器所有内容都
display:none
用于打印机(类似于@media print { body, div, p { display: none } }
) - 在客户端截屏之前使用 JavaScript 隐藏内容(请参阅阻止用户使用“Print Scrn”</a>)
- 尝试禁用或覆盖剪贴板(见这篇文章)
- 用透明或透明图像覆盖相应的内容
- 图片
- 不要将
<img>
标签用于图像,而是将图像设置为背景<DIV>
- 将图像包装成 SVG 或 Flash 电影,以使它们很难以可用的格式访问。
- 禁用图像缓存(通过
<meta>
标签或通过在服务器交付时设置适当的标头),因此它们不会存储在浏览器缓存中(可在客户端计算机上立即访问)。 - 将图像切成部分,因此需要一些额外的工作来重建整个图像
- 向图像添加
onmousedown
事件,例如,显示版权警报。 - 通过服务器脚本(例如 PHP)传递图像并检查引用者。
- 不要将
- 视频
- 流式传输视频以防止通过 URL 进行简单下载。
- 将视频包装成 Flash 电影。
- 使用一些支持 DRM 的讨厌的格式。
- 文本
- 使文本不可选择(请参阅如何使 HTML 文本不可选择)
- 除了覆盖之外,将文本包装到 JavaScript 中(例如,在 ROT13 之后或从第二个文件动态加载),因此文本不能直接在源代码中使用。
- 将文本转换为图像(这可能会降低显示质量)、SVG 或 Flash
我再次重申,这些都不会阻止有经验的用户抓取内容(例如,通过制作屏幕截图和 - 可选地 - 在其上运行 OCR)。有时它就像使用浏览器的开发工具或使用没有 JavaScript 的网站一样简单。然而,这会给没有经验的用户带来困难,因此他们可能会寻找一些更容易获取的资源。
还要记住,上述技术会在阅读页面内容时影响搜索引擎(如果您有兴趣阻止它们,请以 a 开头robots.txt
)。
感谢您提供任何其他想法来补充上述列表!
我想添加一个更哲学的评论。互联网,尤其是万维网的全部意图是共享数据。如果您不希望人们下载图片/视频/文档,请不要将其放在网络上。真的就是这么简单。太多人认为他们可以将自己的规则强加于现有设计。那些想在网络上发布内容并控制其分发的人也希望得到他们的蛋糕并吃掉它。
如果您使用的是 PHP,最好的方法是控制它.htaccess
,您需要将您的文件、图像和视频放在一个单独的文件夹/目录中,并 .htaccess
在此目录中创建一个新文件,内容如下:
RewriteEngine On
RewriteCond %{REQUEST_URI} \.(mp4|mp3|avi)$ [NC]
RewriteCond %{HTTP_REFERER} !^http://sample.com/.*$ [NC]
RewriteRule ^.* - [F,L]
第一行将%{REQUEST_URI}
阻止通过 Web 浏览器或通过curl
. 第二行将%{HTTP_REFERER}
阻止使用 HTML 标签<img>
或从任何网站访问图像/视频,但您提供<video>
的例外情况通常应该是您的网站本身。!
http://sample.com/
您还可以在此处查看我的问题和接受的答案,以了解浏览器端的更多技巧。
简而言之,没有。如果有人可以在他们的浏览器中查看图像或视频,那么根据定义,他们已经下载了它。这就是网络的工作方式——它是基于客户端服务器的。您可以在浏览器(客户端)中查看的任何内容都已从远程网站(服务器)传输到您的计算机。
在标准 HTML 中,无论如何我都不知道。
您并没有真正说出来,但我猜您在人们深度链接到您的内容时遇到了问题。如果是这种情况,并且您对服务器端代码持开放态度,我相信这可能会奏效:
- 创建一个接受数字 id 的页面,将其映射到服务器文件路径,打开该文件,将二进制文件直接写入响应流。
- 在页面请求上,生成一堆随机 id,并将它们映射到实际的媒体 url,并将该映射对象服务器端存储在某个地方(在会话中?),寿命有限。
- 使用指向新媒体页面的媒体链接呈现页面,并将适当的 id 作为查询字符串参数。
- 清除映射对象并在每次回发时生成所有新链接。
这 :
- 不会阻止人们从您的页面内下载
- 绝对不如标准 HTML 轻量级
- 并且有它自己的一系列问题。
但它是一个可行过程的概要,可以帮助您防止用户进行深度链接。
正如许多人所说,您无法阻止某人下载内容。你就是不能。
但是你可以让它变得更难。
您可以用透明的 覆盖图像div
,这将防止人们右键单击它们(或者,将 a 的背景设置为div
图像将具有相同的效果)。
如果您担心交叉链接(即,其他人链接到您的图像,您可以检查 HTTP 引荐来源网址并将来自不属于您的域的请求重定向到“其他”。
你可以减少这种可能性,但不能消除它......
现在使用 Photoshop 甚至在 Lightroom 3 中为图像添加水印也没有什么坏处。确保水印清晰且位于图像的显眼位置。这样,如果它被下载,至少你会得到广告!
如果将来有人想知道,我就是这样做的。
我把它放在根服务器上的 .htaccess 文件中:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain.com/ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain.com.*$ [NC]
RewriteRule \.(mp4|avi)$ - [F]
这会阻止他们说去 domain.com/videos/myVid.mp4 然后从那里保存它。
不,这不对。您可以阻止右键单击和类似的东西,但如果有人想下载它,他会这样做,相信我;)
一旦他们查看包含图片或视频的页面,该项目就会下载到他们浏览器的临时文件夹中。因此,如果您不想下载它,请不要发布它。
您可以标记文件夹或文件,使它们没有读取权限(任何主要的 Web 服务器都支持这一点)。这使您可以将它们存储在服务器上,而无需对外部世界进行任何级别的访问。如果您有一个生成图像供其他人稍后下载的服务,或者如果您使用您的 Web 帐户进行 FTP 访问,但不希望任何人查看文件,您可能需要这样做。(即上传一个.bak 文件到服务器,让其他人再次FTP 下来)。
然而,正如其他人所说,进入人们可以查看图像或视频但不能在本地保存它们的版权区域并不是完全可能的,尽管有一些工具可以阻止非法使用。
将您的图像或视频以 Flash 格式保存。效果很好。
这是一篇旧文章,但对于视频,您可能需要考虑使用 MPEG-DASH 来混淆您的文件。此外,它将为您的用户提供更好的流媒体体验,而无需单独的流媒体服务器。这篇文章中的更多信息: 如何禁用网页中的视频/音频下载?
我相信THEOplayer已经将这种解决方案作为付费服务提供,但我不太确定。
DRM 解决方案现已上市。它使视频可见但不可下载。
什么是数字版权管理?
数字版权管理 (DRM) 解决方案是一种软件程序,旨在帮助人们保护和控制其宝贵的数字内容,无论是文档、视频、图像还是音频文件。
看看这个。希望它有帮助。
<body>
在标签内插入一个 1px x 1px 的透明 gif :
<body><img src="route-to-images/blim.gif" class="blimover">
然后用这个设置样式:
.blimover {
width: 100% !important;
height: 100% !important;
z-index: 1000 !important;
position: absolute !important;
top: 0 !important;
left: 0 !important;
}
这将从页面中删除任何点击功能,但它肯定会阻止人们窃取任何内容!
您可以将其应用于<div>
,<section>
等<article>
,只需相应地命名并防止您的副本和/或图像被撕掉。
没有什么能阻止抓屏……
当然,用户可以看到的任何图像都可以保存在计算机上,而您对此无能为力。现在,如果您想阻止对用户不应该看到的其他图像的访问,我实际上是这样做的:
- 每个链接都指向图像标签中的“src”实际上是发送到服务器上控制器的请求,
- 服务器检查该特定用户的访问权限,如果该用户应该有权访问该图像,则返回该图像,
- 所有图像都存储在浏览器无法直接访问的目录中。
益处:
- 用户将无权访问您不希望他/她访问的任何内容
退税:
- 这些请求很慢..尤其是同一页面上有很多图像。事实上,我还没有找到加速它的好方法..
您可以将图像设置为背景图像并具有透明的前景图像。
你无法阻止图像/视频盗窃,但你可以让普通用户更难,但你不能让像我们这样的程序员更难(我的意思是对网络编程知之甚少的窃贼)。
您可以尝试一些技巧:
1.) 像 YouTube 和许多其他网站(如http://www.funnenjoy.com )一样使用 flash 。
2.) Div 重叠或背景图片设置(但没有意识的用户可以通过打开检查元素或其他开发人员选项轻松节省所有资源)。
3.) 您可以禁用右键单击和特定键(如 CTRL + S)以及其他可能使用 JavaScript 的键,但主要缺点是如果用户禁用 JavaScript,我们的所有技巧都会失败。
4.) 将图像保存在非在线目录中(如果您可以完全访问 Web 服务器),并在每次需要图像/视频时使用 PHP 等服务器端语言读取该文件,并不时更改图像 ID 或创建可以自动执行的脚本每次访问后更改 ID。
5.) 在 apache 中使用 .htaccess 来防止您的图片被其他网站链接。您可以使用本站自动生成.htacess http://www.htaccesstools.com/hotlink-protection/
我认为最好的方法是:以分离的加密部分流式传输视频。
有具有此功能的视频托管服务,例如 vzaar。据我所知,这将使直接下载变得非常困难。至少对 95% 的人来说。
但是当然,如果视频在屏幕上播放,人们可以只使用屏幕录像机和一些简单的软件来记录音频输出的声音(但他/她必须播放整个东西才能保存它,完全不方便)。
如果您只希望授权用户获取内容,则客户端和服务器都需要使用加密。
对于视频和音频,一个很好的解决方案是 Azure 媒体服务,它具有内容保护和加密功能。你在浏览器中嵌入了 Azure 媒体播放器,它会从 Azure 流式传输视频。
对于文档和电子邮件,您可以查看使用特殊客户端的 Azure Rights Management。不幸的是,它目前不能在普通的网络浏览器中工作,除了一次性的、一次性的代码。
但是,我不确定这一切到底有多安全。正如其他人指出的那样,从安全的角度来看,一旦那些下载的字节进入“攻击者的”RAM,它们就已经消失了。在这种情况下,没有解决方案是 100% 安全的(如果我错了,请纠正我)。与大多数安全性一样,目标是使其更难,因此 99% 的人不会打扰。
我认为最好的方法是防止右键单击您的网页,因为这是普通用户尝试下载内容的最方便方式,如果您只能这样做,您可以将其视为备注,因为您永远不会这样做能够阻止计算机极客或黑客下载它,因为一旦内容在互联网上,就意味着它已经在公共领域......
将内容放在谷歌驱动器上并使其下载保护。这样人们只能看到你的文件、图片而不能下载。