网站盗链问题及解决方案

什么是盗链?

    内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己有广告有利益的页面上向最终用户提供内容。常常是一些名不经传的小网站来盗取一些有实力的大网站的地址(比如一些音乐、图片、软件的下载地址)然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量。

 

为什么会产生盗链?

    一般浏览一个页面并不是一次全部传送到客户端的,而是最先的一个http请求被传送回来的是这个页面的文本,然后通过客户端的浏览器对这段文本的解释执行,发现还有图片,那么客户端的浏览器会再发送一条http请求,当这个请求被处理后那么这个图片文件会被传送至客户端,然后浏览器会将图片安放到页面的正确位置,这样一个完整的页面经过发送多条http请求才被完整的显示。基于这样的机制,就产生了盗链问题。不仅损害了原网站的合法利益,还加重了服务器的负担。

 

盗链的分类?

    最多的是两类盗链,图片盗链和文件盗链。被一个访问量极大的网站盗用,会消耗不少的带宽。其他盗链包括:音频盗链、视频盗链。

 

如何防盗链?

    要实现防盗链,就必须先理解盗链的实现原理。在http协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件。换句话说,通过referer,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。有了referer跟踪来源就好办了,这时就可以通过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或返回指定的页面。

 

    如果Web服务器用的是Apache,可以使用Apache自带的Url Rewrite功能可以很轻松地防止各种盗链,其原理是检查refer,如果refer的信息来自其他网站则重定向到指定图片或网页上。

    如果服务器使用的是IIS的话,则需要通过第三方插件来实现防盗链功能了,现在比较常用的一款产品叫做ISAPI_Rewrite(http://www.helicontech.com/isapi_rewrite/),可以实现类似于apache的防盗链功能。另外对于论坛来说还可以使用"登录验证"的方法进行防盗链。

 

备注:referer一来可以追溯上一个入站地址是什么;二来对于资源文件,可以跟踪包含显示他的网页地址是什么。

 

URLRewrite的设置

安装目录下的httpd.ini

RewriteCond Host(.+)

RewriteCond Referer(?!http://\1.*).*

RewriteRule .*\.(?:gif|jpg|png|exe|rar|zip) /block.gif [I,O]

 

Asp.net 2.0中解决盗链的解决方案是利用HttpHandler处理模块解决,但会加重程序负担。

原文地址:https://www.cnblogs.com/AngelLee2009/p/2209594.html