如何防止从我的网站下载图像和视频文件?

问题描述 投票:31回答:24

如何防止从我的网站下载图像和视频文件?可能吗?最好的方法是什么?

html image video blocking
24个回答
78
投票

不,这是不可能的。

如果你能看到它,你就可以得到它。


3
投票

如果您使用的是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>访问imahe / video,除了你提供的例外!而不是通常应该是你的网站本身的http://sample.com/

您还可以查看我的问题和接受的答案here,了解浏览器方面的更多技巧。


2
投票

你可以减少可能性,但不能消除它......


2
投票

我就是这样做的,以防将来有人想知道。

我把它放在根服务器上的.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,然后从那里保存。


1
投票

不,这不对。您可以阻止右键单击和类似的东西,但如果有人想下载它,他会这样做,相信我;)


1
投票

一旦他们查看包含图片或视频的页面,该项目就会下载到其浏览器的临时文件夹中。因此,如果您不想下载,请不要发布。


1
投票

您可以标记文件夹或文件,使它们没有读访问权限(任何主Web服务器都支持此功能)。这允许您将它们存储在服务器上,而无需访问外部世界。如果您有一个为其他人生成图像以便稍后下载的服务,或者您使用您的Web帐户进行FTP访问,但不希望任何人查看这些文件,您可能希望这样做。 (即将.bak文件上传到服务器,以便其他人再次FTP下来)。

然而,正如其他人所说的那样,虽然有些工具可以阻止非法使用,但进入人们可以查看图像或视频但不能在本地保存的版权区域并不是完全可能的。


1
投票

将您的图像或视频以flash格式显示。效果很好。


1
投票

这是一篇旧帖子,但对于视频,您可能需要考虑使用MPEG-DASH来混淆您的文件。此外,它将为您的用户提供更好的流媒体体验,而无需单独的流媒体服务器。在这篇文章中的更多信息:How to disable video/audio downloading in web pages?


0
投票

假设用户可以看到的任何图像都可以保存在计算机上,并且您无法对其进行任何操作。现在,如果你想阻止访问用户不应该看到的其他图像,我实际上是这样做的:

  • 每个链接到你的图像标签中的“src”实际上是一个请求发送到服务器上的控制器,
  • 服务器检查该特定用户的访问权限,如果用户应该访问该图像,则返回该图像,
  • 所有图像都存储在无法从浏览器直接访问的目录中。

效益:

  • 用户将无法访问您不打算访问的任何内容

退税:

  • 这些请求很慢..特别是在同一页面上有很多图像。事实上,我还没有找到加速这种方法的好方法。

0
投票

您可以将图像设置为背景图像并具有透明的前景图像。


15
投票

不要将它们发布到您的网站。

否则就不可能。


0
投票

你不能阻止图像/视频盗窃,但你可以为普通用户更加努力,但你不能让像我们这样的程序员更难(我的意思是知道很少的网络编程的小偷)。

你可以尝试一些技巧:

1.)使用Flash作为YouTube和许多其他网站,如http://www.funnenjoy.com

2.)Div重叠或背景图片设置(但是没有意义的用户可以通过打开检查元素或其他开发人员选项轻松保存所有资源)。

3.)您可以使用JavaScript禁用右键单击和特定键,如CTRL + S和其他可能的键,但主要缺点是,如果用户禁用JavaScript,我们的所有技巧都会失败。

4.)将图像保存在任何在线目录中(如果您具有对Web服务器的完全访问权限),并在每次需要图像/视频时使用服务器端语言(如PHP)读取该文件并及时更改图像ID或创建可自动执行的脚本每次访问后更改ID。

5.)在apache中使用.htaccess以防止其他站点链接您的图像。您可以使用此站点自动生成.htacess http://www.htaccesstools.com/hotlink-protection/


0
投票

<body>标签内插入一个透明的gif 1px x 1px:

<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>等,只需相应地命名并防止您的副本和/或图像被撕裂。

没有什么可以阻止屏幕抓取......


0
投票

如果您只希望授权用户获取内容,则客户端和服务器都需要使用加密。

对于视频和音频,Azure Media Services是一个很好的解决方案,它具有内容保护和加密功能。您将Azure媒体播放器嵌入浏览器中,并从Azure流式传输视频。

对于文档和电子邮件,您可以查看Azure Rights Management,它使用特殊客户端。不幸的是,除了一次性的一次性代码之外,它目前在普通的Web浏览器中不起作用。

但是,我不确定这一切到底有多安全。正如其他人所指出的那样,从安全的角度来看,一旦这些下载的字节位于“攻击者”的RAM中,它们就一样好了。在这种情况下,没有解决方案是100%安全的(如果我错了,请纠正我)。与大多数安全性一样,目标是使其更难,因此99%不会打扰。


0
投票

我认为最好的方法是防止右键点击你的网页,因为这是普通用户尝试下载内容最方便的方式,如果你能够做到这一点,你可以认为它只是因为你永远不会能阻止计算机怪人或黑客下载它,因为一旦内容在互联网上,就意味着它已经在公共领域......


-1
投票

我认为最好的方法是:在分离的加密部件中流式传输视频。

有视频托管服务,如vzaar具有此功能。据我所知,这将使直接下载变得非常困难。至少95%的人。

但是当然,如​​果视频在屏幕上播放,人们可以使用屏幕录像机和一些简单的软件来录制来自音频输出的声音(但是他/她必须播放整个东西来保存它,完全不方便)。


10
投票

必须下载图像才能被客户查看。在许多情况下,视频都是类似的情况。您可以设置代理脚本来提供文件,但这并不能解决阻止用户获取自己副本的问题。有关此主题的更全面讨论,请参阅问题How can I prevent/make it hard to download my flash video?


7
投票

简而言之,没有。如果有人可以在浏览器中查看图像或视频,那么根据定义,他们可以下载它。这就是网络的运作方式 - 它是基于客户端服务器的。您可以在浏览器(客户端)中查看的任何内容已从远程网站(服务器)传输到您的计算机。


7
投票

我想补充一点哲学评论。互联网的全部意图,特别是万维网,是分享数据。如果您不希望人们下载图片/视频/文档,请不要将其放在网上。这真的很简单。太多人认为他们可以在现有设计上强加自己的规则。那些想在网上发布内容并控制其发行的人,正在寻找自己的蛋糕并吃掉它们。


6
投票

在标准HTML中,我还是不知道。

你并没有真正说出来,但我猜你在与人们深入链接到你的内容方面遇到了问题。如果是这种情况,并且您对服务器端代码持开放态度,我相信这可能有效:

  1. 创建一个接受数字id的页面,将其映射到服务器文件路径,打开该文件,将二进制文件直接写入响应流。
  2. 在页面请求中,生成一堆随机ID,并将它们映射到实际的媒体URL,并将该映射对象服务器端存储在具有有限生命的某处(在会话中?)。
  3. 使用指向新媒体页面的媒体链接呈现页面,并使用相应的id作为查询字符串参数。
  4. 清除映射对象并在每次回发时生成所有新链接。

这个 :

  1. 不会阻止人们从您的页面下载
  2. 绝对不像标准HTML那样轻量级
  3. 并有它自己的一系列问题。

但它是一个可行的过程的概述,可以帮助您防止用户深度链接。


5
投票

正如许多人所说,你无法阻止某人下载内容。你不能。

但你可以让它变得更难。

您可以使用透明的div覆盖图像,这将阻止人们右键单击它们(或者,将div的背景设置为图像将具有相同的效果)。

如果您担心交叉链接(即链接到您的图片的其他人,您可以检查HTTP引荐来源并将来自不属于您的域的请求重定向到“其他”。


4
投票

由于浏览器需要传输内容以显示它(文本,图像,视频),因此当显示网站时,数据已经在客户端的计算机上。之前的答案对于如何让没有经验的用户更难获取内容几乎没有提供任何建议。以下是一些指示:

  • 一般 用透明的<DIV>或透明图像叠加相关内容(如本问题的一些答案中所述) 在框架集中打开网站,因此保存可能会错过框架内容。 通过window.open()打开网站隐藏菜单栏。 通过JavaScript禁用右键单击(由于可用性的所有副作用,不建议使用) 通过JavaScript从另一个文件(可能检查特定的引用者或可能是ROT13)加载页面的HTML代码,因此访问源代码更加困难。 告诉浏览器打印机的所有内容都是display:none(类似于@media print { body, div, p { display: none } }) 在客户端制作屏幕截图之前使用JavaScript隐藏内容(请参阅Stop User from using “Print Scrn”) 尝试禁用或覆盖剪贴板(请参阅this post
  • 图片 不要将<img>标签用于图像,而是将图像设置为<DIV>的背景 将图像包装到SVG或Flash影片中,使其难以以可用格式访问。 禁用图像缓存(通过<meta>标记或在服务器交付时设置适当的标头),因此它们不会存储在浏览器缓存中(在客户端的计算机上无法访问)。 将图像剪切成部分,因此需要一些额外的工作来重建整个图像 将onmousedown事件添加到图像,例如,显示版权警报。 通过服务器脚本(例如PHP)传送图像并检查引用程序。
  • 影片 流视频以防止通过URL进行简单下载。 将视频包装到Flash电影中。 使用一些支持DRM的讨厌格式。
  • 文本 使文字无法选择(参见How to make HTML Text unselectable) 除了重叠之外,将文本包装成JavaScript(例如,在ROT13之后或从第二个文件动态加载),因此文本不能直接在源代码中使用。 将文本转换为图像(这可能会降低显示质量),SVG或Flash

我再次重申,这一切都不会阻止有经验的用户抓取内容(例如通过制作一个网上商店和 - 可选地 - 在其上运行OCR)。有时它就像使用浏览器的开发人员工具或使用没有JavaScript的网站一样简单。然而,它会给缺乏经验的用户带来困难,因此他们可能会寻找一些更容易获取的来源。

另外请记住,上述技术会在阅读页面内容时影响搜索引擎(如果您有兴趣阻止它们,请从robots.txt开始)。

感谢您提供其他任何想法以补充以上列表!


3
投票

使用Photoshop或甚至现在在Lightroom 3中为图像添加水印也没有什么坏处。确保水印清晰,并在图像的显眼位置。这样,如果它被下载,至少你得到了广告!

© www.soinside.com 2019 - 2024. All rights reserved.