需要解决的问题
简单的说,这里有两种不同的盗用行为:
1. 使用HTML标记IMG在自己的网站中引用网站的图片。
2. 从网站上下载图片,然后放在自己的网站上。
对于第一种的盗用行为,合法网站的图片被用来美化装饰其它网站,这种盗用对合法网站的损害比较大,因为访问非法网站的访问者其实是从合法网站获取图片的,合法网站的日志文件充满了访问请求记录,并且带宽被非法访问消耗,而合法网站却没有得到任何好处。这种类型的盗用通过技术手段完全可以被防止。
第二种类型的盗用相对来说比较阴险,浏览者在非法网站直接访问非法的图片,而合法网站的版权受到侵害,却得不到赔偿,甚至无法发现这种盗用。因为Web的工作方式对这种类型的盗用实际上无法被阻止,但是可以使得这种盗用更加困难。
完全杜绝这两种盗用行为是不现实的,但是通过技术手段可以使得这种盗用非常困难。在Apache环境下,通过配置可以限制网站图片被盗用。
解决方法
如下配置可以存放在服务器配置文件httpd.conf中,或者存放在.htaccess文件中(开启AllowOverride All),最后的效果是一样的:在这些命令作用的范围内,只有从本网站引用的图片才可以被访问。
SetEnvIfNoCase Referer "^http://my.apache.org/" local_ref=1
SetEnvIf Request_URI "(.)*logo" local_ref=0
<FilesMatch ".(gif|jpg|png|jpeg)">
Order Allow,Deny
Allow from env=local_ref
</FilesMatch>
解释:
标识需要保护的文件
<FilesMatch ".(gif|jpg|png|jpeg)">
</FilesMatch>
作为网站管理员,最大的希望就是能够保护网站上所有文档,但是从技术角度考虑这种想法是不现实的,因此我们这里只讨论对图片文件的保护。作为保护的第一步,首先需要标识出需要保护的文件,然后才能进一步对被标识的文件进行保护。
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对图像进行标记
SetEnvIfNoCase Referer "^http://my.apache.org/" local_ref=1
作为一个简单的例子,假设需要保护的网站的主页面为http://my.apache.org,这时候希望限制所有不是源于本网站的网络访问请求(例如只允许访问包含在本网站页面内的图片)。
当Apache处理一个请求时,它会检查HTTP请求头中的Referer字段,如果该请求来源于本网站(也就是请求页面的URL为本网站域名),则设置环境变量local_ref为1。
在双引号中的字符串是一个正则表达式,只有匹配该正则表达式,环境变量才会被设置。本文不讨论如何使用正则表达式,这里只需要理解SetEnvIf*命令会使用正则表达式作为参数。
SetEnvIfNoCase命令的“NoCase”部分表示这里的正则表达式忽略大小写,'http://my.apache.org/'、'http://My.Apache.Org/'或 'http://MY.APACHE.ORG/'都可以匹配条件。
允许其它网站的友情连接引用本站logo
SetEnvIf Request_URI "(.)*logo" local_ref=0
表示不在SetEnvIfNoCase Referer "^http://my.apache.org/" local_ref=1范围内,但可以被放行的特例,本例表示url中包含logo字样即可访问。
在访问控制中使用环境变量
Order Allow,Deny
Allow from env=local_ref
Apache配置文件中的Order、Allow和Deny命令可以实现对文档的基于环境变量的访问控制,使用Order、Allow和Deny命令首先要考虑的是Allow和Deny命令的顺序对于Apache处理结果的影响,应该以下面的方式使用:
Order Allow,Deny
这里表示Apache首先处理该HTTP请求相关的Allow命令,然后处理相关的Deny命令。这种处理方式的默认策略是Deny,所以除非有明确的允许的设置,否则该请求就会被拒绝,任何非法访问将无法成功。
Allow from env=local_ref
这样只有在local_ref变量被定义的情况下,该请求才会被允许;否则其它所有请求和访问将会被拒绝,因为这些请求不满足Allow条件。
注意,请不要在.htaccess和httpd.conf中使用容器命令,这里不需要该容器命令,除非有特殊的需求,例如希望Get请求和Post请求进行不同的处理。
对图片进行水印处理
上面介绍的方法并不能完全防止图像盗链,这是因为有些执著的盗用者可以伪造Referer值来盗用图片,使相关设置失效,所以不可能完全防止网站图片被盗链,但是上面采取的措施会使得盗链变得很困难。
此外,还有一个防止图片被盗用的方法,就是对网站的图片都进行水印处理。对一个数字图片进行水印处理是指在图片中加入一个特殊的签名编码,并且可以进行验证和检测,数字水印并不会降低图片的质量,甚至可以实现图像被切割以后的剩余部分仍然会包括水印信息。图片被再次编辑、打印,并再次扫描以后,水印仍然可以被检测到。因此,水印技术是一个非常好的保护图片不被盗用的技术。
记录盗用请求
SetEnvIfNoCase Referer "!^http://my.apache.org/" not_local_ref=1
SetEnvIfNoCase Request_URI ".(gif|jpg)" is_p_w_picpath=1
RewriteEngine On
RewriteCond ${ENV:not_local_ref} =1
RewriteCond ${ENV:is_p_w_picpath} =1
RewriteRule .* - [Last,Env=poach_attempt:1]
CustomLog logs/poachers_log CLF env=poach_attempt
在httpd.conf文件中添加如上命令,会在 apache安装路径/logs/poachers_log文件中记录所有具有非法的Referer头信息的访问请求
在上面代码中,头两行为条件设置标记(也就是没有正确的本地Referer的图片文件),RewriteCond检测是否该标记被设置,然后RewriteRule设置第三个标记,最后一行使得这样的访问请求被记录在特定的文件中。

职场 Apache 休闲

0

分享

微博 QQ 微信

收藏

上一篇:MPLS ×××问题求解 下一篇:apache+mysql+php...
networkcareer

17篇文章,4W+人气,0粉丝

转载于:https://blog.51cto.com/2home/177525

网站图像防盗----Apache配置妙法相关推荐

  1. apache 更改默认网站目录 及 CentOS Apache配置详解

    apache 更改默认网站目录: 1:我们测试把默认网站目录改到root家目录下 新建/root/website目录 #mkdir -p /root/website #echo "websi ...

  2. 【Linux】Centos7 下使用Apache 配置网站虚拟地址, 另附 laravel 虚拟地址配置

    最近使用laravel 搞项目,配置本地开发环境,很是头疼,不知道是什么情况,简单直白地总结一下,附上配置详情 电脑环境: Centos7 + lamp 你的电脑上有Apache Apache配置文件 ...

  3. Apache配置一级反向代理和二级反向代理实现目录网站管理

    一级反向代理:就是从A站配置到B服务器站 二级反向代理:就是在B站服务器基础上再分到C服务器站 1.设置httpd.conf 打开Apache24/conf文件夹下的httpd.conf设置文件,找到 ...

  4. Apache配置与网页优化

    文章目录 构建虚拟Web主机 1.基于域名: 2.基于IP地址: 3.基于端口: 基于域名的虚拟主机 Options指令解释: Options指令常用选项: AllowOverride指令解释: 基于 ...

  5. nginx rewrite重写与防盗链配置

    nginx rewrite重写规则与防盗链配置方法 时间:2016-02-04 15:16:58来源:网络 导读:nginx rewrite重写规则与防盗链配置方法,rewrite规则格式中flag标 ...

  6. 【CyberSecurityLearning 32】Apache配置、Apache的访问控制设定、LAMP平台的搭建

    目录 Apache配置 web服务 Apache 1.先启动httpd服务 2.通过端口来验证服务是否启动 3.建立主页 4.关于Apache服务软件的主配置文件分析 Apache的访问控制设定 1. ...

  7. apache php 单入口,apache配置php实现单一入口方法

    apache配置php实现单一入口方法 发布时间:2019-10-08 10:37 来源:互联网 当前栏目:网站服务器 在apache的httpd.conf加入,需要把LoadModule rewri ...

  8. [转] apache配置rewrite及.htaccess文件

    转载自: http://www.uh80.com/?p=654 apache配置rewrite及.htaccess文件 1.  首先确定您使用的 Apache 版本,及是否加载了 mod_Rewrit ...

  9. Apache配置(转载)

    Apache配置 http://grid.tsinghua.edu.cn/home/liulk/publish/computer/ApacheConfig.html Linux Apache Web ...

最新文章

  1. SAP IDoc E1EDP04 Z8 数据错误之对策
  2. html中map属性怎么用的,HTML IMAGE MAP标签的使用
  3. 计算机中管理方法科学化的重要性,浅论档案科学化管理的重要性
  4. 在VCS仿真器中使用FSDB
  5. Java中不一致的操作会扩大规则
  6. Java 8 Friday Goodies:本地交易范围
  7. SAP License:最近收到的信(审计人员关于成本问题的请教)
  8. 如何在Unity项目中添加语音识别?
  9. 浏览器的不兼容,归纳几点html编码要素
  10. 验证只能以英文字母开头的字符串
  11. tensorflow两种padding方式
  12. 二进制修改linux文件,linux下的二进制文件操作
  13. 你知道chrome小恐龙游戏吗?3分钟使用JavaScript实现
  14. mac ~/.vuerc may be outdated. Please delete it and re-run vue-cli in manual mode.
  15. 解决android手机EditText设置光标颜色,android:textCursorDrawable=@drawable/corner_cursor 华为手机无效果的问题
  16. 什么是透视变形的opencv和python
  17. 自定义 VSCode 背景图片
  18. Qt 应用程序输出中文乱码+UI界面输出中文乱码
  19. 银行木马卷土重来、开发者破坏开源库影响数千应用程序|1月10日全球网络安全热点
  20. docs邮箱服务器,配置邮箱服务器属性

热门文章

  1. mysql建表简单的date数据类型_MySQL建表 TIMESTAMP 类型字段问题
  2. Python-基于flask的接口框架
  3. Python 项目依赖包 第三方库 生成requirements.txt的两种方法
  4. 服务器运行环境怎么搭建,服务器运行环境怎么快速搭建?
  5. 怎么计算开学第几周php,如何计算开学第几周, 要求每年通用
  6. svm 的提前处理
  7. win7 ghost 安装串口驱动inf文件出现问题
  8. ubuntu13.10上交叉编译win32运行的vlc2.0.3总结
  9. 【c++】27.事件驱动、IO复用、sellect、poll、epoll三者的区别
  10. 回顾一些重要的CNN改进模型(你真的了解 Convolutional Neural Networks 么)