网站图像防盗----Apache配置妙法

转载 2007年10月16日 00:16:00
原贴:http://blog.chinaunix.net/u/21012/showart_145885.html

网站图像防盗----Apache配置妙法
网站图像防盗----Apache配置妙法
     每个网站所有者都在尽力美化自己的网站,使它看上去更酷、更具有吸引力,其中最常见的方法就是使用图片、Logo及Flash等。但是,这也会带来一个问 题,因为越漂亮、越吸引人的网站,漂亮的图片和Flash等就容易被别的网站悄悄的盗用。下面我们就一起讨论如何防止网站图像被盗用。

    需要解决的问题

    简单的说,这里有两种不同的盗用行为:
    1. 使用HTML标记IMG在自己的网站中引用网站的图片。
    2. 从网站上下载图片,然后放在自己的网站上。

     对于第一种的盗用行为,合法网站的图片被用来美化装饰其它网站,这种盗用对合法网站的损害比较大,因为访问非法网站的访问者其实是从合法网站获取图片的, 合法网站的日志文件充满了访问请求记录,并且带宽被非法访问消耗,而合法网站却没有得到任何好处。这种类型的盗用通过技术手段完全可以被防止。

    第二种类型的盗用相对来说比较阴险,浏览者在非法网站直接访问非法的图片,而合法网站的版权受到侵害,却得不到赔偿,甚至无法发现这种盗用。因为Web的工作方式对这种类型的盗用实际上无法被阻止,但是可以使得这种盗用更加困难。

    完全杜绝这两种盗用行为是不现实的,但是通过技术手段可以使得这种盗用非常困难。在Apache环境下,通过配置可以限制网站图片被盗用。

    标识需要保护的文件

    作为网站管理员,最大的希望就是能够保护网站上所有文档,但是从技术角度考虑这种想法是不现实的,因此我们这里只讨论对图片文件的保护。

    作为保护的第一步,首先需要标识出需要保护的文件,然后才能进一步对被标识的文件进行保护。在Apache配置文件中添加如下内容:

<FilesMatch "/.(gif|jpg)"> [这里添加保护限制命令]
</FilesMatch>


    将容器命令包含在或等容器中,或者单独列出,不处于任何保护容器中,这样就会对网站所有文件进行保护,甚至可以存放在.htaccess文件。将该容器放在不同的位置,保护的范围机会有所不同。

    Referer HTTP头字段

     当用户访问Web服务器请求一个页面时,用户浏览器发送的HTTP请求中会有一个被称为HTTP请求头(HTTP Request Header)的信息,这个头信息中包含客户请求的一些信息,例如发出请求客户主机的浏览器版本、用户语言、用户操作系统平台、用户请求的文档名等,这些 信息以变量名/变量值的方式被传输。

    在这些信息中,Referer字段对于实现防止图片盗用非常重要。Referer字段指 定客户端最后一个页面的URL地址。例如,如果用户访问页面A,然后点击在页面A上到页面B的链接,访问页面B的HTTP请求会包括一个Referer字 段,该字段会包括这样的信息“这个请求是来自于页面A”。如果一个请求不是来自于某个页面,而是用户通过直接在浏览器地址栏输入页面A的URL地址的方式 来访问页面A,那么在HTTP请求中则不会包括Referer字段。这样对于我们防止盗链有什么帮助呢?Referer字段是帮助判断对图像的请求是来自 自己的页面,还是来自其它网站。

    使用SetEnvIf对图像进行标记

    作为一个简单 的例子,假设需要保护的网站的主页面为http://my.apache.org,这时候希望限制所有不是源于本网站的网络访问请求(例如只允许访问包含 在本网站页面内的图片)。这里可以使用一个环境变量作为一个标记,如果条件满足时就设置该变量,如下所示:
    SetEnvIfNoCase Referer "^http://my/.apache/.org/" local_ref=1

    当Apache处理一个请求时,它会检查HTTP请求头中的Referer字段,如果该请求来源于本网站(也就是请求页面的URL为本网站域名),则设置环境变量local_ref为1。

    在双引号中的字符串是一个正则表达式,只有匹配该正则表达式,环境变量才会被设置。本文不讨论如何使用正则表达式,这里只需要理解SetEnvIf*命令会使用正则表达式作为参数。

    SetEnvIfNoCase命令的“NoCase”部分表示这里的正则表达式忽略大小写,'http://my.apache.org/'、'http://My.Apache.Org/'或 'http://MY.APACHE.ORG/'都可以匹配条件。

    在访问控制中使用环境变量

    Apache配置文件中的Order、Allow和Deny命令可以实现对文档的基于环境变量的访问控制,使用Order、Allow和Deny命令首先要考虑的是Allow和Deny命令的顺序对于Apache处理结果的影响,应该以下面的方式使用:
    Order Allow,Deny

    这里表示Apache首先处理该HTTP请求相关的Allow命令,然后处理相关的Deny命令。这种处理方式的默认策略是Deny,所以除非有明确的允许的设置,否则该请求就会被拒绝,任何非法访问将无法成功。

    因此,在Apache的配置文件httpd.conf中添加如下命令,来实现本地引用发挥作用:

Order Allow,Deny
Allow from env=local_ref


    这样只有在local_ref变量被定义的情况下,该请求才会被允许;否则其它所有请求和访问将会被拒绝,因为这些请求不满足Allow条件。

    注意,请不要在.htaccess和httpd.conf中使用 容器命令,这里不需要该容器命令,除非有特殊的需求,例如希望Get请求和Post请求进行不同的处理。

    把这些相关设置放在一起,在Apache的配置文件中就会有如下内容:

SetEnvIfNoCase Referer "^http://my/.apache/.org/" local_ref=1
<FilesMatch "/.(gif|jpg)">
Order Allow,Deny
Allow from env=local_ref
</FilesMatch>


    如上配置可以存放在服务器配置文件httpd.conf中,或者存放在.htaccess文件中,最后的效果是一样的:在这些命令作用的范围内,只有从本网站引用的图片才可以被访问。

    对图片进行水印处理

    上面介绍的方法并不能完全防止图像盗链,这是因为有些执著的盗用者可以伪造Referer值来盗用图片,使相关设置失效,所以不可能完全防止网站图片被盗链,但是上面采取的措施会使得盗链变得很困难。

     此外,还有一个防止图片被盗用的方法,就是对网站的图片都进行水印处理。对一个数字图片进行水印处理是指在图片中加入一个特殊的签名编码,并且可以进行验 证和检测,数字水印并不会降低图片的质量,甚至可以实现图像被切割以后的剩余部分仍然会包括水印信息。图片被再次编辑、打印,并再次扫描以后,水印仍然可 以被检测到。因此,水印技术是一个非常好的保护图片不被盗用的技术。

    记录盗用请求

     如果想知道自己网站的艺术品是否被盗,可以尝试使用同样的侦测和环境变量来记录可疑请求。例如,在httpd.conf文件中添加如下命令,那么会在 /usr/local/web/apache/logs/poachers_log文件中记录所有具有非法的Referer头信息的访问请求:

SetEnvIfNoCase Referer      "!^http://my/.apache/.org/" not_local_ref=1
SetEnvIfNoCase Request_URI "/.(gif|jpg)" is_image=1
RewriteEngine On
RewriteCond ${ENV:not_local_ref} =1
RewriteCond ${ENV:is_image} =1
RewriteRule .* - [Last,Env=poach_attempt:1]
CustomLog logs/poachers_log CLF env=poach_attempt



    在上面代码中,头两行为条件设置标记(也就是没有正确的本地Referer的图片文件),RewriteCond检测是否该标记被设置,然后RewriteRule设置第三个标记,最后一行使得这样的访问请求被记录在特定的文件中。

    上面简单介绍了在Apache环境下,如何通过配置来限制网站图片被盗用的方法,抛砖引玉,希望大家将自己更好的经验介绍出来。(T111)

 转自赛迪网-开放系统世界
 

通过.htaccess 对网站图片的基本防盗处理

前提:公司是个媒体类网站,对于外网图片要求一些基本的防盗链处理 综合考虑后采用了 .htaccess 配合 网站锁右键 进行一个基本的防盗链处理。 apache如何开启htacce...
  • liuhelong12
  • liuhelong12
  • 2015年12月16日 10:30
  • 711

【JSP开发】一个防盗链的WEB小例子

有的资源你点出后会有广告,广告旁边是资源连接,有些人直接把资源连接发给别人,企图不看广告直接进入链接拿资源,为了防止盗链行为的发生,我们要检测用户访问url的情况来进行一系列措施。 需要实现的功能就是...
  • u013517797
  • u013517797
  • 2015年01月31日 16:28
  • 1553

网站如何防盗链的8种方法

如果你是网站的开发者或维护者,就不得不重视盗链的问题了。如果你刚刚开发完一个没有防盗链的带有文件下载功能的网站,挂上internet,然后上传几个时下非常热门的软件或电影并在网站内公布下载地址,让MS...
  • shyaideguo
  • shyaideguo
  • 2014年11月12日 11:26
  • 932

Android项目:手机安全卫士(7)—— 手机防盗功能

Android项目:手机安全卫士(7)—— 手机防盗功能1 介绍前面已经将手机防盗的界面、业务代码逻辑完成了,现在就是最后的功能实现了,手机防盗主要有这么几个功能: 短信:发送警报短信,接收命令短信 ...
  • xwdoor
  • xwdoor
  • 2016年03月08日 15:13
  • 1385

图书防盗磁条原理

书店、图书馆、超市、商场所用的磁条原理,包括射频、声磁,着重讨论了电磁波磁条。...
  • younggift
  • younggift
  • 2013年10月26日 15:42
  • 7729

nginx设置图片防盗链

如何为我们的网站中的图片或视频资源设置防盗链?
  • shi_yi_fei
  • shi_yi_fei
  • 2017年02月28日 15:16
  • 1248

图像处理方向常用网站

做机器视觉和图像处理方面的研究工作,最重要的两个问题:其一是要把握住国际上最前沿的内容;其二是所作工作要具备很高的实用背景。解决第一个问题的办法就是找出这个方向公认最高成就的几个超级专家(看看他们都在...
  • tigerda
  • tigerda
  • 2016年09月20日 15:54
  • 2153

图书馆防盗系统原理

有时候去学校的图书馆借书,借阅系统明明显示还有这本书,但是却找不到,一般情况就是书被盗了。这种问题有时让我也好抓狂,所以就研究了一下一般图书馆防盗系统的原理。    大家回忆一下大家的借书和还书的过程...
  • jk050802
  • jk050802
  • 2013年11月23日 16:49
  • 1957

Android实现手机防盗APP

没事的时候捣鼓了手机防盗的小app。记录下功能和原理: 功能一:自动报警 原理是利用手机的光线传感器,获取光照强度,如果亮度达到一定程度就播放报警音乐,退出了app就后台service运行。 应用的场...
  • dzsw0117
  • dzsw0117
  • 2014年09月08日 18:01
  • 634

家里没人怎么防火防盗?装上这段自动看家程序

通过Matlab程序调用摄像头,对门窗自动定时拍照。每拍一张照片,就和前一张照片对比,判断家里是否正常。一旦探测出异常,立刻给主人发送报警邮件,并播放惊悚音频或警报。...
  • iam3mjun
  • iam3mjun
  • 2016年07月16日 20:48
  • 1469
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:网站图像防盗----Apache配置妙法
举报原因:
原因补充:

(最多只允许输入30个字)