百度百科对防盗链的定义是
此内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容。 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(比如一些音乐、图片、软件的下载地址)然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量。
这段话理解起来很生涩,举个例子:有时候我们从一个网站,比如腾讯,转载了一篇文章到自己的博客或空间,发现一些图片显示不了,这就是防盗链在起作用。图片是放在腾讯的服务器上的,腾讯拒绝其它网站的页面访问该资源。
一般情况下,当我们浏览一个网页时,并不是一次请求就会把整个页面的内容传到本地浏览器,尤其是当这个页面带有图片或者其它资源。第一次请求会传回该页面的HTML文本,浏览器解析该文本发现还有图片,会发送第二次请求,请求获得图片。盗链问题是:如果一个网站没有页面中所说的资源,它就会把这个图片链接到别的网站,这样没有任何资源的网站利用了别的网站的资源来展示给浏览者,提高了自己的访问量,而大部分浏览者又不会很容易地发现,这样显然,对于那个被利用了资源的网站是不公平的。一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。一方面损害了原网站的合法利益,另一方面又加重了服务器的负担。
要实现防盗链,我们就必须先理解盗链的实现原理,提到防盗链的实现原理就不得不从HTTP协议说起,在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件。换句话说,通过referer,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。有了referer跟踪来源就好办了,这时就可以通过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或者返回指定的页面。
防盗链原理:
http标准协议中有专门的字段记录referer 一来可以追溯上一个入站地址是什么 二来对于资源文件,可以跟踪到包含显示他的网页地址是什么。 因此所有防盗链方法都是基于这个Referer字段 网上比较多的2种 一种是使用apache文件FileMatch限制,在httpd.conf中增加 ( 其实也可以将把下面的语句存成一个.htaccess文件),并放到你的网站的根目录(就是www/html目录),这样子别人就没有办法盗连你的东东了~~ SetEnvIfNoCase Referer "^ http://yahoo.com/" local_ref=1 Order Allow,Deny Allow from env=local_ref Allow from 127.0.0.1 这种很方便禁止非允许访问URL引用各种资源文件 请大家注意,把第一句"^ http://yahoo.com/"改为你的网站,比如我的网站是: http://www.linji.cn 我应该这么写的 "^ http://www.linji.cn/" 第二种是使用rewrite,需要增加apache的mode_rewrite,支持.htaccess文件目录权限限制 在虚拟主机根目录增加.htaccess文件,描述从定向,把非本地地址refer的图片文件都从定向到警告图片或者警告网页上。 首先要确认你的服务器或空间的服务器解译引擎为Apache2,还有支持.htaccess客户设置文件, 如果你有自己的服务器就请先对./conf/httpd.conf 文件做以下修改 找到:#LoadModule rewrite_module modules/mod_rewrite.so 把前面的 # 给去丢 找到等一个 AllowOverride None 改为 AllowOverride All 重启Apache2服务器 接下就是做一个 .htaccess 文件了,其 .htaccess 文件内容为 RewriteEngine on RewriteCond %{HTTP_REFERER} !^ http://aaoo.net/.*$ [NC] RewriteCond %{HTTP_REFERER} !^ http://aaoo.net$ [NC] RewriteCond %{HTTP_REFERER} !^ http://www.aaoo.net/.*$ [NC] RewriteCond %{HTTP_REFERER} !^ http://www.aaoo.net$ [NC] RewriteRule .*.(jpg|jpeg|gif|png|bmp|rar|zip|exe)$ http://down.yoyo.com.ru/err.html [R,NC] 其中有色的地方都是要改为你的: 红色:就是改为你提供下载页面的地址,也就是只有通过这个地址才可以下载你所提供的东东。 蓝色:就是要保护文件的扩展名(以|分开),也就是说以这些为扩展名的文件只有通过红色的地址才可以访问。 绿色:如果不是通过红色的地址访问蓝色这些为扩展名的文件时就回重定向到绿色地址上。 这个方法有个好处是,不同的虚拟主机用不同的描述定义。 接下就是怎么用 .htaccess 文件来实现防盗链了。 首先要在空间上建两个目录(当然目录名随你),一个为 web 另一个为 down , web 是用来放下载页面的(或下载程序),down 当然就是放你提供的东东的啦, 把 .htaccess 文件的红色部分改一下,改为http://你的域名/web。蓝色部分 改为你要保护文件的扩展名。绿色部分改为http://你的域名/web。改后保存 .htaccess 文件把它上传到 down 目录。 还有第三种: 我在解决plog禁止盗链的时候,发现个问题,也算个好方法。 plog把所有资源都自己管理起来,用resserver.php来动态显示,这样统一的入口方便添加权限操作。 同时造成上面2种方法无法使用,因为不再是apache直接访问资源文件,而是php通过文件读取。 因此只能在代码中做手脚:在读取资源文件输出之前,加如下判断代码 引用 $referer = $_SERVER['HTTP_REFERER']; $selfurl = $_SERVER['HTTP_HOST']; if(false == strpos($referer,$selfurl)) { echo '非法盗链!'; exit(1); } 这里有些偷懒,直接看引用地址中是否包含host地址,不过原理就是这样,判断referer是否是本站地址。 我们常常在下载的时候,也碰到盗链网站无法下载,报盗链的问题。要下载这类文件最简单的方法就是改referer 比方flashget中,网址下面的"引用"一栏中,直接填写下载地址就可以了。