在搭建网站过程中,防盗链是大家必须要了解的一项知识。为了吸引大量的浏览者,我们往往会在网站上添加一些图片、音乐、视频以及提供各类软件、资料下载,极大地丰富了网站的内涵。但也因此吸引了一些不良网站,他们为了不增加成本而扩充自己的站点内容,经常盗用其他网站的链接。这样,一方面原本没有任何资源的网站利用了别的网站的资源来展示给浏览者,提高了自己的访问量;另一方面由于链接到的原网站的地址,不可避免地造成了原网站流量的损失。这对于那些被利用了资源的网站来说显然是不公平的。因此,便产生了防盗链一说,以此来防止这类情况的发生。
一般我们在浏览一个完整的页面时,客户端的浏览器并不是一次性的传送整个页面,第一个HTTP请求传送的是这个页面的文本,然后对这段文本进行解释执行,如果发现其中还有图片,那么会再次发送一条HTTP请求,当这个请求被处理后,这个图片文件才会被传送到客户端,最后浏览器会将图片安放到页面的正确位置,就这样一个完整的页面要经过多次发送HTTP请求才能被完整的显示。基于这种机制,就会产生盗链问题:如果一个网站没有页面所说的图片信息,那么它完全可以链接到其他网站的图片信息上。
要实现防盗链,我们就必须先理解盗链的实现原理,对症下药才能根除病症。在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件。换句话说,通过referer,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。有了referer跟踪来源就好办了,这时就可以通过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或者返回指定的页面。
如果想对自己的网站进行防盗链保护,则需要针对不同的情况进行区别对待。如果网站服务器用的是Apache,那么使用Apache自带的Url Rewrite功能可以很轻松地防止各种盗链,其原理是检查refer,如果refer的信息来自其他网站则重定向到指定图片或网页上。
如果服务器使用的是IIS的话,则需要通过第三方插件来实现防盗链功能了,现在比较常用的一款产品叫做ISAPI_Rewrite,可以实现类似于Apache的防盗链功能。另外对于论坛来说还可以使用“登录验证”的方法进行防盗链。
下面将提供两种设置防盗链的方法,以作参考。
方法一:通过 cPanel 面板来设置防盗链。
这种方法是基于使用了 cPanel 管理后台的,步骤如下:
1、登陆cPanel控制面板后,点击安全 -> HotLink 保护。这个功能是保护防止其他网站直接链接到你网站上的文件,通过设置就可以起到图片防盗链的作用。
2、默认可能是禁用的,你需要点击“启用”按钮将它启用。
3、接着进行 HotLink 保护配置,其中“允许访问的 URL”这里一般要填写上属于你自己的站点网址,也就是你想让哪些站点可以引用你的图片的地址。
4、“阻止直接访问下列扩展名”填写你网站上所用的图片扩展名,用英文逗号隔开,例如:jpg,jpeg,gif,png,bmp。
5、“Url 重新定向到”你可以设置一副你自己的版权图片,当有人非法引用你的图片时就会默认显示这张图片来警告他。直接输入图片的地址即可。
6、上面的设置完成后,最后点击“提交”即可,这时你可以自己在别的网站上引用下站点的图片测试一下看看效果。
方法二:Apache设置防盗链。
如果你用的是Apache服务器,那么使用.htaccess文件就可以方便的进行设置,从而防止其他站点的用户盗链我们站点的文件。.htaccess文件是Apache中相当重要的配置文件,其格式为纯文本,它提供了针对目录改变配置的方法,通过在一个特定的文档目录中放置一个或多个指令的文件,以作用于此目录及其所有子目录。因此,如果我们要保护的内容(此处以防止图片盗链为例,即图片)位于网站内多个目录下,可以考虑将其放在根目录下;而如果图片由单独的子目录如“/images/”,则只需将其放置在该目录下(当然也可以放到根目录中)。
通过.htaccess来防止网站的图片、压缩文件、或视频等非HTML文件被盗链的方法相当简单,通过在该文件中加入几句命令即可保护我们宝贵的带宽。具体设置示例如下:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !zzbaike.com [NC]
RewriteCond %{HTTP_REFERER} !ikuaizi.com [NC]
RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteRule .*\.(gif|jpg|png)$ http://zzbaike.com/no.png [R,NC,L]
简单的解释一下上述语句:
1、RewriteCond %{HTTP_REFERER} !^$ [NC]
允许空“HTTP_REFERER”的访问,即允许用户在浏览器地址栏中直接输入图片地址时就显示图片的内容。
2、RewriteCond %{HTTP_REFERER} !zzbaike.com [NC]
设置允许访问的HTTP来源,包括zzbaike.com、ikuaizi.com、zhuaxia.com、google.com等。
3、RewriteRule .*\.(gif|jpg|png)$ http://zzbaike.com/no.png
定义被盗链是替代的图片,让所有盗链jpg、gif、png等文件的网页,显示根目录下的no.png文件。
注意:替换显示的图片不要放在设置防盗链的目录下,并且该图片文件体积越小越好。当然你也可以不设置替换图片,使用下面的语句即可: RewriteRule .*\.(gif|jpg|png)$ –[F]
4、R是转向的意思;NC指的是不区分大小写;L的作用是指本次转向到处结束,后续的转向不受先前判断语句的影响。
5、上例中是gif、jpg、png,而根据需要,可更改或添加其他文件类型,如rar、mov等,不同文件扩展名间使用“|”分割。
这样的话,就可以基本做到简单的防止被盗链情况的发生,而且可以尽最大可能的减少服务器流量的浪费。当然了,如果你不在意这点流量的话,那么可以不用考虑上述设置啦!