谈谈网站防盗链

时间:2022-01-30 12:42:14

       引子:明明引用了一个正确的图片地址,但显示出来的却是一个红叉或写有“此图片仅限于***网站用户交流沟通使用”之类的“假图片”(下图便是网易博客的防盗链效果)。用嗅探软件找到了多媒体资源的真实地址用下载软件仍然不能下载。下载一些资源时总是出错,如果确认地址没错的话,大多数情况都是遇上防盗链系统了。常见的防盗链系统,一般使用在图片、音视频、软件等相关的资源上。

谈谈网站防盗链


一、什么是防盗链系统


        在确保地址正确的情况下,不能下载相应的资源,均是受到防盗链系统的影响,那么究竟什么是防盗链系统呢?防盗链自然就是防范盗链,所以这里先说一下什么是盗链。

        盗链是指在自己的页面上展示一些并不在自己服务器上的内容。通常的做法是通过技术手段获得它人服务器上的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容。比较常见的是一些小站盗用大站的资源(图片、音乐、视频、软件等),对于这些小站来说,通过盗链的方法可以减轻自己服务器的负担,因为真实的空间和流量均是来自别人的服务器。         防盗链系统就是防范盗链的系统,防止别人通过一些技术手段绕过本站的资源展示页面,盗用本站的资源,让绕开本站资源展示页面的资源链接失效。实施防盗链系统后,因为屏蔽了那些盗链的间接资源请求,从而可以大大减轻服务器及带宽的压力,也正如此,越来越多的站点都开始实施防盗链技术。

        二、窥视防盗链

        现在大家应该知道了为什么有真实地址仍然不能下载,这就是防盗链的作用。凡事必有因果,为什么可以防盗链呢,其实现原理是什么?防盗链又是如何实现的呢?
        提到防盗链的实现原理就不得不从HTTP协议说起,在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件。换句话说,通过referer,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。有了referer跟踪来源就好办了,这时就可以通过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或者返回指定的页面。 如果想对自己的网站进行防盗链保护,则需要针对不同的情况进行区别对待。如果网站服务器用的是apache,那么使用apache自带的Url Rewrite功能可以很轻松地防止各种盗链,其原理是检查refer,如果refer的信息来自其他网站则重定向到指定图片或网页上。         如果服务器使用的是IIS的话,则需要通过第三方插件来实现防盗链功能了,现在比较常用的一款产品叫做ISAPI_Rewrite,可以实现类似于apache的防盗链功能。另外对于论坛来说还可以使用“登录验证”的方法进行防盗链。

        三、以子之予攻子之盾,防盗链的破解

        尽管防盗链技术越来越成熟,破解相对来说难度较大,但在了解原理之后,大多都可以针对其防范的原理入手进行破解。
        对于图片防盗链,已经有人给出了详细的破解代码,对应的代码页面笔者已上传到笔者以前的个人博客空间中,在转发图片时,在图片地址前面加上“http://www.z7z8.com.cn/old/pic.asp?url=”地址即可解决图片防盗链问题。如果有自己的网站空间可以直接从http://www.z7z8.com.cn/old/pic.zip下载,解压后上传到自己的空间中,转贴时在图片地址前面加上“域名/路径/pic.asp?url=”即可。 对于文件资源的防盗链,可以通过人为的加上引用页的方法来解决不能下载的问题,如获得http://www.z7z8.com.cn/old/pic.zip这一地址,下载时发现采用了防盗链技术,这时可以在新建下载任务时人为添加“引用页:”。因为绝大多数防盗链只是判断引用页是不是本站,所以这一方法可以突破防盗链进行下载,但不是所有情况下均有效。

谈谈网站防盗链


默认情况下,迅雷的新建任务对话框中是没有“引用页”项的,需要在迅雷中执行“工具→配置”,在打开的“配置面板”对话框中,在“任务默认属性”标签中,勾选“新建面板显示引用页”复选框即可。


谈谈网站防盗链

小提示:        上面讨论的只是较初级的防盗链也破解,随着技术的日新月异,防盗链技术也飞速发展,因此现在的防盗链技术也要先进、复杂得多了。所以上面提到的破解方法并不一定针对所有的防盗链情况适用。

防盗链大致历程经历了如下几个阶段:

一、 初级

      经常更换音乐文件及其所在文件夹的名称。这种方法最简单,最原始,只要发现服务器流量不正常了,就把后台打开点击更新资源地址,程序就自动修改资源名称。这样一来被盗链的地址就马上失效了。  缺点:由于资源够多,更新起来很占服务器资源,时间够长到后来,每更新一次几乎要用一个通宵。

二、普通级

      隐藏音乐文件的真实地址,制作方法是通过脚本运算或者加密码来给查找真实地址制造麻烦。就拿mp3播放来说吧,我所使用的方法是这样比如play.asp 是播放器页面,在服务器运算的时候放取得真实地址,把这个地址写入session[地址]中保存, play.asp根本不出现这是的资源地址,play.asp下载完成后立即会加载url.asp脚本文件,在url.asp中检测是否有session[地址]有就写如脚本,并且立即清除该值。没有就不作任何输出。这样处理在播放页效果比较好,但是在下载页就不这么好隐藏了,而且只要用户安装了讯雷软件,鼠标移动到播放器上真实地址力马就显示出来了。而且本人认为只要是能给客户端提供正常服务器的,基本上不可能做到隐藏。除非不提供服务。否则随便找个抓包软件一抓就出来了。


三、中量级

       用asp.net拦截httpHandlers,该方法和拦截IIS的ISAPI插件基本上是一个原理。作为资源下载站,根本不用隐藏真实地址,就算完全暴露在外,其他站长把地址放到他的站上点击就会失效。原理是:通过链接请求的来路判断是否为盗链。如果来路不符合要求则表示该请求为盗链的,马上终止就可以了。这种方式相对前面两种方法来说防盗技术已经跨越了一个质的飞跃过程了。效果非常好。现在使用这种方式防盗的软件非常多,比如最出名的免费软件re_writer等。但是美中不足的是:如果象54star.net 这样的音乐站,要提供在线试听功能,而经检测播放器请求的来路是空的,也就是说要提供在线试听服务器,必须把来路为空也视为合法。这样一来,盗链的链接通过 工具下载 或 者 点右键->另存为 的已经其他站的播放器直接链接也是合法的。没有完全达到防盗的效果。


四、重量级


     通过密匙验证,使用的原理和方法三很相识,一样是拦截IIS,但不同的是,拦截的不是来路,而是地址后面的一串参数---经过加密处理后的密匙。其他密匙的原理和现在的在线支付系统一样,在线支付系统后台都要设置一个密码,在你的网站上也要设置一个同样的密码,表单提交来往的过程中判断是否合法全靠它了。使用这种方法防盗链的加密防止通常是这样 密匙 = 加密函数(客户端IP + 密码). 最后生成的地址形如:http://down.54star.net:89/cd/js-bksyjx/02.mp3?5335aaf7dec19388b7bb799dd70482e,问号前面的时候真实地址,后面那串东西就是密匙,判断是否合法就是通过判断它是否正确了。想盗本站资源的难度就形如要去破解一个未知长度,而且随时可以更改的密码是一样的。这种方法可以说在几种防盗技术中可以勘称最完美的了。而且资源服务器和网站服务器可以分开拜访。如果要提供给友情站使用,只需要把密匙告诉他即可。


五、超重量级


经管使用方法四已经几乎达到完美了,但是该防盗方法唯一美中不足的就是性能了。一般下载站都是使用HTTP协议提供下载,IIS的功能很强大,会ASP。NET的都知道其三层结构,其处理机制很庞大。所以,如果仅仅是把IIS当作下载资源服务器的话有些让IIS不堪重负了。象54star.net这个站就发现,只要下载的人稍微一多IIS占用资源非常高,而且IIS的可以并发的数量并不多,只要一超过一定数量,就会出现各种各样的问题。比如提示服务器太忙这种问题你也经常遇到。所以,可以使用防盗链专用服务器,如思达防盗链下载专用服务器软件等。



参考文章:http://bbs.csdn.net/topics/110042791

                http://windyli.blog.51cto.com/1300305/315283/