盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。
客户端向服务器请求资源时,为了减少网络带宽,提升响应时间,服务器一般不会一次将所有资源完整地传回给客户端。比如在请求一个网页时,首先会传回该网页的文本内容,当客户端浏览器在解析文本的过程中发现有图片存在时,会再次向服务器发起对该图片资源的请求,服 务器将存储的图片资源再发送给客户端。在这个过程中,如果该服务器上只包含了网页的文本 内容,并没有存储相关的图片资源,而是将图片资源链接到其他站点的服务器上,就形成了盗链行为。
通过分析访问源,拒绝非法访问,主要是图片和网盘服务器使用的较多。
HTTP Referer 是header 的一部分,当浏览器向 web 服务器发送请求的时候,一般会带上 Referer,告诉服务器我是从哪个页面链接过来的,服务器藉此可以获得一些信息用于处理。通过该头域的值,我们可以检测到访问目标资源的源地址
在 http 协议中,如果从一个页面跳到另一个页面,header 字段里面会带个 Referer。图片服务器通过检测 Referer 是否来自规定域名,来进行防盗链。
如果盗用网站是 https 的协议,而图片链接是 http 的话,则从 https 向 http 发起的请求会因为安全性的规定,而不带 referer,从而实现防盗链的绕过。官方输出图片的时候,判断了来源(Referer),就是从哪个网站访问这个图片,如果是你的网站去加载这个图片,那么 Referer 就是:你的网站地址;你的网址肯定没在官方的白名单内,(当然作为可操作性极强的浏览器来说 referer 是完全可以伪造一个官方的 URL 这样也也就也可以饶过限制)所以就看不到图片了。
因此,若不发送 Referer,也就是没有来源。那么官方那边,就认为是从浏览器直接访问的,所以就能加载正常的图片了。目的盗链是指在自己的页面上展示一些并不在自己服务器上的内容。通常的做法是通过技术手段获得它人服务器上的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容。
比较常见的是一些小站盗用大站的资源(图片、音乐、视频),对于这些小站来说,通过盗链的方法可以减轻自己服务器的负担,因为真实的空间和流量均是来自别人的服务器。对大站造成的影响确实徒徒增加了服务器压力,用户还不是自己的于是乎防盗链就是防止这种行为的产生,实施防盗链系统后,因为屏蔽了那些盗链的间接资源请求,从而可以大大减轻服务器及带宽的压力,也正如此,越来越多的站点都开始实施防盗链技术。
对于私有的 bucket,因为访问控制的原因,基本不存在大规模盗链的可能性,对于公开空间,因为没有访问权限控制,需要进行防盗链设置。
七牛对于公开空间的防盗链做法主要是通过设置白名单、黑名单和空 referer 是否可以访问来实现的
设置选项(白名单和黑名单不会同时生效)有:白名单、黑名单、关闭三个选项。
七牛采用三个参数来实现防盗链:
设置 | 描述 |
---|---|
<RefererType> |
防盗链类型:黑名单(black) |
<RefererValue> |
防盗链黑白名单列表:以逗号(,)分割 |
<NullReferer> |
是否允许空 referer |
AWS 也是通过 bucket 的访问控制来实现防盗链的,AWS 通过 bucket Policy 中的 condition 来先设置不同请求的权限。
盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。