CDN加速

防盗链

更新时间:2021-01-22 13:34:57

一. 功能简介

  视频盗链,下载盗链等盗链行为,不仅使网站的版权受到侵害,还会导致用户群体流失,造成整体收益降低,同时也会额外增加带宽成本和服务器运维成本,更甚者将入不敷出,因此,防盗链是视频和下载网站亟需解决的问题之一。

  网宿推出了一系列防盗链功能,包括基础防盗链,高级防盗链,回源鉴权防盗链以及中心认证防盗链技术,通过一定规则识别出盗链请求,并拒绝提供服务,从而防止盗链,有效帮助客户节省带宽和服务器运维成本。

二. 使用说明

2.1 基础防盗链

网宿亮相亚马逊云峰会:解读如何构建安全可靠的云基础架构

图1 基础防盗链业务流程图

(1)用户向CDN节点发起请求。

(2)CDN节点判断用户信息(如IP、Referer、User-Agent、Cookie,等)是否满足配置要求,如不满足则拒绝;如满足且本地有缓存则直接响应,本地无缓存则回源获取相应资源。

(3)源站响应CDN节点的请求。

(4)CDN节点响应客户端的请求,并将资源缓存到本地。

2.2 高级防盗链

网宿亮相亚马逊云峰会:解读如何构建安全可靠的云基础架构

图2 高级防盗链流程图

(1)用户向客户的内容管理服务器请求文件URL。

(1’)客户端本地生成高级防盗链URL。

(2)客户的内容管理服务器根据约定的规则生成高级防盗链URL并响应给用户。如:

  http://ws.cdn.com/test.mp4?wsSecret=c82151660097f7c341d6df8b037e82c7&wsTime=201710111042

(3)用户使用获取到的文件URL向CDN节点发起请求。

(4)CDN节点进行高级防盗链验证:判断URL是否过期(支持绝对时间和相对时间两种方式),若过期则拒绝,若未过期则根据约定规则计算出MD5值并进行对比,若不匹配则拒绝,若匹配则提供服务。当CDN节点无缓存时,回源获取资源。

(5)源站将资源响应给CDN节点。

(6)CDN节点将资源响应给用户,同时缓存到本地。

2.3 回源鉴权防盗链

  回源鉴权分为同步鉴权和异步鉴权两种方式。

  同步鉴权的特点是CDN节点在处理每个接收到的请求之前,都要先将相关的请求信息发回源站进行鉴权,根据源站响应的鉴权结果,决定是否提供服务,适用于对防盗链要求比较严格的场景。异步鉴权则是指CDN节点收到用户请求时,优先响应内容,同时将相关的请求信息发回源站进行鉴权,若鉴权通过则继续响应内容,否则断开连接停止响应,适用于对用户体验更为关注的场景。

  以下以同步鉴权为例进行详细说明。

请求和鉴权使用不同的URL

网宿亮相亚马逊云峰会:解读如何构建安全可靠的云基础架构

图3 请求和鉴权使用不同URL的业务流程图

(1)终端用户发起URL1请求,如:

  http://cdn.example.com/test.dat?auth=xxxx&name1=value1&name2=value2

(2)CDN节点提取鉴权参数auth=xxx后改写拼接鉴权URL2,向客户的鉴权服务器发起鉴权请求,如:

  http://auth.example.com/authorize?auth=xxxx

(3)鉴权服务器校验鉴权参数auth=xxx的合法性,响应鉴权结果

(4)若鉴权通过,但是CDN节点没有缓存该内容,则CDN节点回源获取内容(URL1去掉鉴权参数,或者去掉问号后面的所有参数后回源),请求URL3,如:

  http://cdn.example.com/test.dat?name1=value1&name2=value2

(4’)若鉴权通过,且CDN节点有缓存内容,则直接响应给用户

(4”)若鉴权不通过,则CDN节点根据客户配置的策略,选择403拒绝响应,或者是302跳转(跳转的URL需要客户指定)

(5)源站响应内容给CDN节点

(6)CDN节点再响应给终端用户,同时将内容缓存下来。

2.4 中心认证防盗链

  中心认证防盗链方案从业务、参数和算法等维度给了客户很大的灵活性,基于不同维度(如:基于IP、URL、请求头、甚至客户自定义的任意参数)提供防盗方案,可控维度多,算法丰富,可扩展性强。既可以帮助客户更智能地实时发现盗链URL,又可以帮助客户发现盗链用户并自动进行屏蔽。

  鉴于CDN节点发送请求回认证中心的鉴权过程存在一定的时间消耗,为了不影响用户的体验,网宿支持同步鉴权和异步鉴权2种方式。

网宿亮相亚马逊云峰会:解读如何构建安全可靠的云基础架构

图5 认证中心同步鉴权流程图

(1)用户向CDN节点发起文件url请求;

(2)当CDN节点验证防盗链成功时(该步骤可选,这里的防盗链包括基础防盗链以及时间戳防盗链,即通过边缘节点先进行初步的校验),则将请求转发给认证中心;若校验失败,则拒绝提供服务;

(3)认证中心根据事先约定的规则,对请求的合法性进行校验,并响应鉴权结果给CDN节点;

(4)若认证通过,CDN节点响应文件给用户;若认证失败,则CDN节点拒绝提供服务。

与同步鉴权流程相比,异步鉴权的差异在第2步:

CDN节点先进行防盗链校验,若校验成功,则先响应内容给用户,同时将请求转发给认证中心进行鉴权;若校验失败,则拒绝提供服务。

表1 同步和异步鉴权场景对比说明

鉴权方案 方案概述 适用场景
同步鉴权 CDN收到用户请求,先不响应内容,转发请求回认证中心做鉴权,依据认证中心的决策,响应/拒绝用户。 对版权保护要求非常高,在未经授权的情况下,决不允许客户获取内容。
异步鉴权 CDN收到用户请求,优先响应内容,同时转发用户请求回认证中心做鉴权,依据认证中心的决策,再对已响应的请求进行相应的处理,如果判断非法,则断开连接停止响应内容;如果判断合法,则继续响应内容。 优先响应内容给用户,保障用户的体验,异步进行合法性校验,一旦发现盗链,即时拒绝。

三. 应用场景

表2 防盗链应用场景

防盗链技术 基础防盗链 (黑白名单\Referer\User-Agent\Cookie防盗链) 高级防盗链 回源鉴权防盗链 中心认证防盗链
应用场景 允许或禁止来自指定IP\网页\浏览器\携带指定cookie的用户请求 只允许未过期的请求 用户每次请求都要回客户鉴权服务器进行认证; 适用于全局鉴权场景; 用户每次请求都要回网宿鉴权服务器进行认证; 适用于全局鉴权场景;
优点 实现方式简单 防盗链效果较好; 有效期外均拒绝; 防盗链效果非常好; 基于全局(全国/全球)数据分析并给出鉴权结果; 方案灵活,可自由定义; 可结合用户账号等信息进行鉴权; 防盗链效果非常好; 基于全局(全国/全球)数据分析并给出鉴权结果; 可控维度多,算法丰富,可扩展性强; 可快速上线本方案,无需客户组建团队研究鉴权算法,无需搭建鉴权平台,无需人员维护;
缺点 标签很容易被模仿,防盗效果一般 有效期内有潜在被盗链风险 需要客户自己研发鉴权算法,搭建平台并自行维护等,投入成本高、周期长 暂无