什么是防盗链?

你可能也听到或看到提到「防盗链」这个词吧,比如想要 Markdown 写博客文章方便插入图片,然后在选择哪家图床好,阅读相关教程时看到别人说「…老担心新浪相册他家搞个防盗链…」,那什么是防盗链呢?

防盗链

我在网上看了几篇文章,特意记录总结了下。

在解释「防盗链」之前,先看看百度百科的对「盗链」的定义:

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

再看看百度百科上对「盗链」产生的原因说法:

一般浏览有一个重要的现象就是一个完整的页面并不是一次全部传送到客户端的。如果请求的是一个带有许多图片和其它信息的页面,那么最先的一个Http请求被传送回来的是这个页面的文本,然后通过客户端的浏览器对这段文本的解释执行,发现其中还有图片,那么客户端的浏览器会再发送一条Http请求,当这个请求被处理后那么这个图片文件会被传送到客户端,然后浏览器会将图片安放到页面的正确位置,就这样一个完整的页面也许要经过发送多条Http请求才能够被完整的显示。基于这样的机制,就会产生一个问题,那就是盗链问题:就是一个网站中如果没有起页面中所说的信息,例如图片信息,那么它完全可以将这个图片的连接到别的网站。这样没有任何资源的网站利用了别的网站的资源来展示给浏览者,提高了自己的访问量,而大部分浏览者又不会很容易地发现,这样显然,对于那个被利用了资源的网站是不公平的。一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。一方面损害了原网站的合法利益,另一方面又加重了服务器的负担。

可以看出「盗链」简单的讲,就是在自己的网站链接了别人网站的资源。这种盗用别人网站的链接行为,不仅损害了原来网站的合法利益,还加重了其服务器的负担。怎么理解,举例子,如 A 在他的网站上直接链接了 B 网站某张图片的链接地址,相当于 A 盗取 B 的资源扩充自己的站点内容,损害了 B 的利益不说,B 的网站服务器还得接收请求 A 那里那张图片的资源请求。

这对于很多网站来说肯定不能允许这么放恣呢,所以有必要采取一定措施阻止。网站「防盗链」就是,其实它就是一种机制,也可以说是一种技术,目的就是防止自己网站上的东西(如图片,文件 etc。)被其他用户采用其他的技术手段来访问或者下载。那怎么做到防盗链呢?

网上文章都有说到。看看百度百对于防盗链原理的说法

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

如果想对自己的网站进行防盗链保护,则需要针对不同的情况进行区别对待。如果网站服务器用的是apache,那么使用apache自带的Url Rewrite功能可以很轻松地防止各种盗链,其原理是检查refer,如果refer的信息来自其他网站则重定向到指定图片或网页上。

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

可以看出,服务器可以通过判断 Referer 中的值是不是自己网站服务器的域名来判断这个请求是不是别人盗链的,也就是请求没有在自己的网站上发出。当然也有人说,我在浏览器输入框中手动的输入图片的下载地址也可以下载啊,是这样的,那这是为什么呢?我只能说你遇到的是大部分的网站,但是也有一些防盗链机制很严格的即使你自己手动的在浏览器输入框中输入也不能看到图片,问题就是对大部分的网站在手动输入请求地址的时候 Referer 是空的(null),服务器就会认为你是手动的在下载图片,这样服务器是不会去拦截的。——这是防盗链机制中的一种:通过 http 请求中的 Referer 来判断。还有如下几种方式也可以实现:1、nginx 在处理每一个静态的页面请求的时候也可以拦截处理 2、通过用户是否登录来判断(这里主要是 session 在起作用),可能还有其他的方式,等等。

反盗链

既然有「反盗链」的机制,那么对于很多的有那些需求的人来说我得可以搞到我需要的东东啊。这就需要去反盗链,看了参考资料的文章说的方式,讨论的是针对利用 http 请求 request 中的 referer 的机制来分析反盗链机制,本质是利用相应的技术手段来改变这个 referer 的值来实现。具体的查看参考资料。

参考资料:

觉得文章对您有帮助请我喝杯咖啡吧^_^
0%