防盗链
防盗链
防盗链的定义
防盗链其实就是在网络服务器端进行个性化编程,通过URL过滤技术实现对目标资源控制访问。
比如:
file.maple.com/test.jpg
这个图片地址,如果没有装防盗链,那么任意用户都能通过该URL轻而易举的在他的网站上引用这个图片。如果对file.maple.com
这个地址进行服务器端编程,如给URL拼接参数,得到file.maple.com/test.jpg?authcode=xxx&ip=127.0.0.1
,自动拼接了ip参数,然后在对URL路由时针对IP参数进行个性化判断,就能实现只有127.0.0.1
来访问这个链接,而其它的IP地址则无法访问该链接。
防盗链的产生
一般我们在浏览网页时,一个完整的页面并不是客户端通过一次HTTP请求就将全部资源从服务器上拉取下来的,而是会分成很多次HTTP请求。如果客户端所浏览的页面带有图片或其它功能性信息,那么客户端的第一个HTTP请求就是想资源服务器端请求这个页面的文本信息,然后通过客户端的浏览器对服务器返回的数据进行解析,如果发现其中包含图片地址URL,那么客户端的浏览器会自动针对该图片URL再一次发送HTTP请求去获取目标图片并将其放置到目标位置,就这样一个完整的网络页面内部经过多次HTTP请求才能完整的展现出来。
基于此机制,就会产生盗链的问题。
个人理解
盗链:全称应该是 盗取网络链接地址。
如果一个网站中没有其页面中的图片信息,那么它完全可以链接访问到其他网站的图片信息。这样,没有任何资源的网站利用了其他网站的资源来展示给浏览者,提高了自己站点的访问量,而大部分浏览者又不会很容易地发现内部资源的调用过程,这样显然对于那些被利用了资源的网站是不公平的。一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。
防盗链的实现
要实现防盗链,首先要理解盗链的实现原理,提到防盗链的实现原理就不得不从HTTP协议说起,在HTTP协议中,有一个表头字段叫 referer
,其采用URL的格式来表示从哪儿链接到当前的网页或文件。换句话说,通过referer,网站可以检测到目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。有了referer
跟踪来源就好办了,这时就可以通过技术手段来进行处理,一旦检测到来源不是期望的URL地址,那么就进行拦截或者返回降级页面和资源。
HTTP Headerss示例
1 | :authority: g.csdnimg.cn |
其中refer为:
1 | referer: https://blog.csdn.net/qq_44543508/article/details/123557819 |
如果想对自己的网站进行防盗链保护,需要针对不同的情况进行区别对待。如果网站服务器用的是apache,那么使用apache自带Url Rewrite插件就可以很轻松实现各种防盗链,其原理是检查HTTP请求头中的refer属性值,如果refer的信息来自非目标站点则重定向到指定图片或网页上。还有很多其他的防盗链实现机制,总体上都换汤不换药,都是基于refer
属性值进行个性化过滤。
参考文档: