CDN加速

直播防盗链

更新时间:2020-11-02 15:04:33

1 功能简介

  防盗链的目的是为了确保内容提供商的内容资源在经过CDN分发时不被其他人恶意的引用或者被非法用户下载,从而确保服务的安全性以及避免产生不必要的带宽浪费,为内容提供商节约成本。
  根据防盗链规则的复杂程度,网宿的直播防盗链功能可以分为基础防盗链和高级防盗链两大类,可以满足绝大部分客户不同业务不同场景的防盗链需要。
  防盗链是防止被盗链的有效措施,其不仅可以帮助客户,防止其直播内容被未授权的第三方盗取使用,也可以帮助客户防止其加速域名在客户不知情的情况下被第三方使用。这不仅可以保护客户的自主知识产权不被不法分子侵害,也可以有效地帮助客户减少因盗链产生的损失,建议所有客户配置。

2 功能说明

2.1 基础防盗链

  基础防盗链主要是针对客户端请求过程中所携带的一些关键信息来验证请求的合法性,比如客户端请求IP,请求URL中携带的referer。优点是规则简单,配置和使用都很方便,缺点是防盗链所依赖的验证信息很多都是可以伪造的,因此此类防盗链可靠性较低。

2.1.1 IP 访问控制

原理:

  IP地址在互联网上具有唯一性,客户端向服务端(CDN节点)发起请求时,服务端可以明确获取到客户端的IP地址,因此可以利用IP地址的这些特点进行访问控制。
  1. 支持1个或多个IP的访问控制(黑名单或白名单)
  2. 支持针对IP段进行访问控制(通常采用IP+子网掩码的表示方式,比如192.168.1.0/24)
  3. 支持区域访问许可。比如,禁止或允许某些地区的用户(根据访问者的IP所在的地理位置)访问某些特定的资源,常用于版权保护。

适用场景举例:

  1)发现某些IP地址访问次数巨大,属于不正常的访问或者可能是某种攻击行为,这种情况下可以考虑将该IP地址加入黑名单,此IP地址访问到CDN的节点时会被直接拒绝。
  2)加速的内容属于公司或者企业的员工内部使用,不希望被企业之外的其他人访问到。企业通常有固定统一的出口IP地址,因此可以将这些出口IP加入白名单,只允许白名单中的IP访问,其他所有IP都将被拒绝。
  3)有些特殊的资源只希望北京地区的用户使用,禁止其他地区的用户使用,可以使用地区访问许可的功能。

2.1.2 Referer防盗链原理:

  Referer在HTTP协议里有特殊的用途,当浏览器向服务器发送请求时,一般会带上Referer头,告知服务器该请求是从哪个页面链接过来的。Referer经常被用于页面访问统计、图片防盗链等。
  流媒体直播同样支持Referer防盗链,当请求发送到CDN服务器后,CDN服务器检查客户URL中所携带的Referer字段的信息,禁止或者允许符合特定规则(支持正则匹配)的Referer的请求。

适用场景举例:

  某直播客户,通过referer做防盗链。比如http://cdn.example.com/,访问该页面下的所有直播流时,比如http://cdn.example.com/live1.flv,浏览器在请求时会自动带上Referer:http://cdn.example.com/表明请求的来源地址。

注意事项:

  1) 在使用Referer防盗链功能时,应该特别注意指明空引用的处理方式(空引用是指http请求头中没有携带Referer头部,通常是直接在浏览器地址栏访问某个url或者通过非浏览器的方式访问某个url时,请求头部不会带有referer头部;),默认禁止空引用。
  2) Referer很容易伪造,因此referer防盗链安全性较低。

2.2 高级防盗链

  流媒体直播中,高级防盗链主要是指时间戳防盗链、swf防盗链、回源鉴权防盗链。
  时间戳防盗链的特点是加密的url具有时效性,无法伪造,当达到过期时间后url不再被允许访问,适合一些对“时效性”有要求的场景,使用时需要内容提供商和CDN配合,内容提供商负责生成加密的url,CDN负责根据预先设定的规则对url进行合法性验证。时间戳防盗链由于实现原理简单、可靠性高,推荐使用。
  Swf防盗链为RTMP协议所特有,其特点为需要客户提前将SWF文件上传至CDN节点,由客户端和CDN节点在请求过程中基于一定机理进行加密和解密验证,CDN验证通过则响应用户请求,验证失败则拒绝用户请求。
  回源鉴权的特点是CDN节点每次接收到的请求,都需要先回源进行验证,验证通过后才认为请求合法,继续提供服务,适用于对防盗链有很高的实时性要求的场景。另外,一些特殊性的防盗链,CDN默认不支持的情况下也可以考虑采用回源鉴权的形式。

2.2.1 时间戳防盗链

原理:
网宿科技再获上海市经济和信息化委员会肯定

  1、当用户发起请求时视频请求时,用户的请求会被引导至客户源站。例如,终端用户发起的请求url为:http://www.example.com/test.flv
  2、客户源站通过一系列参数共同加密生成一串密文。
  3、终端用户利用客户源站返回的url,重新向网宿节点发起请求。
  4、网宿节点进行验证:请求是否过期以及加密串是否匹配。

  注,上述原理中,客户源站的角色也可以替换为客户播放终端,由播放终端通过一系列参数共同加密生成一串密文,使用加密后的url向网宿节点发起请求。

  目前网宿支持绝对时间和相对时间两种方式的时间戳防盗链控制。

绝对时间控制方式原理如下:

  此方式下用于生成密文的参数有过期时间wsABSTime、请求直播流、网宿key(由网宿提供)、IP地址串。假设过期时间为:4d024e80,用户请求的直播流为:test.flv,网宿key为:abc,ip地址为192.168.1.1,则以上数据经过md5加密后,生成的密文为:84579e4b82787870e418004c59f696b0,则客户源站返回给终端用户的url为:http://cdn.example.com/test.flv?wsSecret=84579e4b82787870e418004c59f696b0&wsABSTime=4d024e80
  终端用户利用客户源站返回的url,重新向网宿节点发起请求,发起请求的url为:http://cdn.example.com/test.flv?wsSecret=84579e4b82787870e418004c59f696b0& wsABSTime =4d024e80

  网宿节点进行验证:
  a) 根据过期时间wsABSTime和当前时间进行比较,确认请求是否过期
  b) 根据约定的md5计算方式和密文,计算出md5加密串后和url中原始的加密串进行比较。
  只有a)和b)都验证通过,请求才会被认为是合法的。不合法的请求可以采取禁止访问或者302重定向到指定的url。

相对时间控制方式原理如下:

  与绝对时间控制方式相比,相对时间控制方式使用参数keeptime和wsTime来共同决定过期时间,wsTime表示终端用户向源站请求url时,源站的机器时间,keeptime表示url有效的时间长度,以秒为单位,以十六进制或十进制表示,同时keeptime作为参数加入加密串的计算;例如:
  rtmp://rtmpup4.pstatp.com/live/xxxxxx/xxxx?wsSecret=xxx&keeptime=7200&wsTime=xxx。

  网宿节点在进行url请求是否过期时,判断方式如下:
  当前时间-wsTime< keeptime ,则url请求未过期;
  当前时间-wsTime>= keeptime ,表示url请求已过期;
  若keeptime为空,则按照约定配置全平台统一过期时间。
  同样,相对时间控制方式除校验有效期之外,也需要校验md5加密串是否匹配。

使用方法:

  1、需要确认的信息
  a) 确认时间的表示格式。默认采用的是Unix时间戳的形式,比如1371982466表示时间是2013-06-23 18:14:26,推荐使用16进制格式:51c6ca82。
  b) 需要确认使用绝对时间还是相对时间控制方式,使用相对时间控制的话还需要确认是否需要使用keeptime,不使用keeptime需要与客户确认默认配置的过期时长。
  c) 确认参与md5计算的相关参数,以及组合顺序。

应用场景举例:

  1、适用于对url有一定时效性的场景
  2、如果在md5加密算法中添加客户端的ip,可以防止用户观看视频后直接将获取到的视频URL粘贴分享出去,提供给他人播放。客户端的ip也可以通过url中的参数传递。

注意事项:

  1)时间戳防盗链默认支持,可以直接配置,不需要再次开发
  2)当防盗链涉及的参数发生变更时,需要通知CDN进行配合更改,原则上密文一旦确定尽量不要发生变动,不然可能导致源和加速节点使用的密文不一致,请求全部验证不通过
  3)使用IP进行md5计算可能带来一些问题:如果加密使用的IP1,而到CDN这边用的是另外一个IP2,这样就会被禁止访问。

2.2.2 回源鉴权防盗链

原理:
网宿科技再获上海市经济和信息化委员会肯定

  1、终端用户向CDN请求视频内容,在请求中携带需要回源鉴权的参数。例如:http://www.test.com/live/channel.flv?key1=vaule1&key2=vaule2
  2、 CDN节点可通过POST或者GET方式向用户鉴权服务器返回需要鉴权的参数,鉴权参数需要用户提前告知CDN。
  3、鉴权服务器根据CDN传送而来的鉴权信息,进行防盗链判断,决定是否允许用户请求该直播视频,并将结果返回给CDN节点。
  4、 CDN节点根据客户鉴权服务器返回的结果,响应或者拒绝终端用户的视频请求。

应用场景举例:

  1、客户技术实力比较强,又不希望第三方公司知悉其防盗链原理时,可使用回源鉴权防盗链。
  2、 CDN无法满足客户特殊防盗链需求时,可使用回源鉴权防盗链。

使用方法:

  1、告知CDN,回源鉴权的参数
  2、告知CDN,鉴权服务器地址。
  3、告知CDN,回源鉴权的方式,目前支持get及post两种
  4、告知CDN,鉴权结果,例如1代表成功,0代表失败
  5、告知CDN,超时等待时间,及超时如何处理,例如,鉴权服务器3S不响应,就同意请求,或拒绝请求。

注意事项:

  1、每次请求都需要先进行鉴权,在请求量较大时,需要考虑鉴权服务器的压力
  2、该鉴权形式客户需要维护专门的鉴权服务器。