apache httpd 如何防盗链

1. 什么是盗链?

你在qq空间里上传发布了一张照片.  假设你的这些照片可以被所有人查看. 我在我的网站上使用你的图片,  那么我只需要获取你的图片的url 地址, 就可以了.  如果qq空间未作防盗链, 那么我在我的网站就可以盗链qq空间的图片了.

假设. http://www.whoistester.com/index.html  里 的html代码为

<html><body><img src=”qq网站上的某张图片url地址如 http://www.qq.com/a.png” alt=”” /> </body> </html>

如果qq网站未作防盗链, 那么打开www.whoistester.com/index.html后,可以显示qq网站上的图片.
qq网站做了防盗链以后, 打开www.whoistester.com/index.html 后, 图片无法显示了.

所以, 盗链主要是为了防止别的网站链接自己站点的图片资源(不仅包括图片)等资源, 主要是为了版权保护, 和流量减少.

2. 如何防盗链.

是利用了http协议的头 HTTP_REFERER . 当你http://www.whoistester.com/index.html 里链接了qq空间的图片, 那么访问qq的图片时,发的http头里的 HTTP_REFERER 会是 http://www.whoistester.com , 那么qq 空间的服务器, 发现http_refferer 不是qq空间自己的域名, 则做相应的处理,比如禁止访问或者跳转到其他页面等. 就实现了防盗链.

3. 那来介绍下apache httpd服务如何防盗链. 可以将配置放在httpd.conf 或者 .htaccess , 建议放在httpd.conf

1) 使用rewrite

原理: 判断访问的http_refferer 是否匹配我的网站域名,如果不匹配,则跳转到我自定义的一个页面(例如禁止页面, 或者“提示不存在的其他一个页面或者图片”)。

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://www.whoistester.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.whoistester.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.whoistester.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.whoistester.com$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.whoistester.com/errorlink.png [R,NC]

 

2)使用SetEnvIfNoCase 和 FilesMatch

SetEnvIfNoCase Referer "^https?://([^/]*)?whoistester\.com/" local_ref=1
SetEnvIf Referer ^$ local_ref=1

<FilesMatch "\.(jpe?g|gif|png)$">
  Order Allow,Deny
  Allow from env=local_ref
</FilesMatch>

 

此篇文章已被阅读2364 次

Add a Comment

邮箱地址不会被公开。 必填项已用*标注