1.1 基础防盗链
基础防盗链主要是针对陪玩游戏系统客户端请求过程中所携带的一些关键信息来验证请求的合法性, 比如客户端请求IP,请求URL中携带的referer。优点是规则简单,配置和使用都很方便,缺点是防盗链所依赖的验证信息很多都是可以伪造的,因此此类防盗链可靠性较低。
IP 访问控制
原理:
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)有些特殊的资源只希望地区的用户使用,禁止其他地区的用户使用,可以使用地区访问许可的功能。
Referer 防盗链
原理:
Referer在HTTP协议里有特殊的用途,当浏览器向服务器发送请求时,一般会带上
Referer头,告知服务器该请求是从哪个页面链接过来的。Referer经常被用于页面访问统计、图片防盗链等。
注意事项:
1) 在使用Referer防盗链功能时,应该特别注意指明空引用的处理方式(空引用是指
http请求头中没有携带Referer头部,通常是直接在浏览器地址栏访问某个url或者通过非浏览器的方式访问某个url时,请求头部不会带有referer头部;),默认禁止空引用。
2) Referer很容易伪造,因此referer防盗链安全性较低。
高级防盗链
陪玩游戏系统中,高级防盗链主要是指时间戳防盗链、swf防盗链、回源鉴权防盗链。 时间戳防盗链的特点是加密的url具有时效性,无法伪造,当达到过期时间后url不再被
允许访问,适合一些对“时效性”有要求的场景,使用时需要内容提供商和CDN配合,内 容提供商负责生成加密的url,CDN负责根据预先设定的规则对url进行合法性验证。时间戳防盗链由于实现原理简单、可靠性高,推荐使用。
Swf防盗链为RTMP协议所特有,其特点为需要客户提前将SWF文件上传至CDN节点, 由客户端和CDN节点在请求过程中基于一定机理进行加密和解密验证,CDN验证通过则响 应用户请求,验证失败则拒绝用户请求。
回源鉴权的特点是CDN节点每次接收到的请求,都需要先回源进行验证,验证通过后才认为请求合法,继续提供服务,适用于对防盗链有很高的实时性要求的场景,比如陪玩游戏系统。另外,一些特殊性的防盗链,CDN默认不支持的情况下也可以考虑采用回源鉴权的形式。
时间戳防盗链
原理:
1、当用户发起请求时视频请求时,用户的请求会被引导至客户源站。
2、客户源站通过一系列参数共同加密生成一串密文。
3、终端用户利用客户源站返回的url,重新向服务商节点发起请求。
4、服务商节点进行验证:请求是否过期以及加密串是否匹配。
目前服务商支持绝对时间和相对时间两种方式的时间戳防盗链控制。
服务商节点进行验证:
a) 根据过期时间wsABSTime和当前时间进行比较,确认请求是否过期
b) 根据约定的md5计算方式和密文,计算出md5加密串后和url中原始的加密串进行比较。
只有a)和b)都验证通过,请求才会被认为是合法的。不合法的请求可以采取禁止访问或者302重定向到指定的url。
相对时间控制方式原理如下:
与绝对时间控制方式相比,相对时间控制方式使用参数keeptime和wsTime来共同决定过期时间,wsTime表示终端用户向源站请求url时,源站的机器时间,keeptime表示url 有效的时间长度,以秒为单位,以十六进制或十进制表示,同时keeptime作为参数加入加密 串 的 计 算 ;
服务商节点在进行url请求是否过期时,判断方式如下: 当前时间-wsTime< keeptime ,则url请求未过期;
当前时间-wsTime>= keeptime ,表示url请求已过期;
若keeptime为空,则按照发布点配置的默认过期时间来进行判断(如5分钟)。同样,相对时间控制方式除校验有效期之外,也需要校验md5加密串是否匹配。
使用方法:
1、需要确认的信息
a) 陪玩游戏系统确认时间的表示格式。默认采用的是Unix时间戳的形式,比如1371982466表示时间是2013-06-23 18:14:26,支持其他一些时间表达格式,比如:
i. 20130623181426
ii. 2013-06-23
iii. 51c6ca82(推荐此表示方式,将十进制的1371982466采用16进制表示,,有较好的隐蔽性)
b) 陪玩游戏系统需要确认使用绝对时间还是相对时间控制方式,使用相对时间控制的话还需要确认是否需要使用keeptime,不使用keeptime需要与客户确认默认配置的过期时长。
c) 确认参与md5计算的相关参数,以及组合顺序。
应用场景举例:
1、适用于对url有一定时效性的场景
2、如果在md5加密算法中添加客户端的ip,可以防止用户直接将获取到的URL粘贴分享出去,提供给他人播放。陪玩游戏系统客户端的ip也可以通过url中的参数传递。
注意事项:
1)时间戳防盗链默认支持,可以直接配置,不需要再次开发
2)当防盗链涉及的参数发生变更时,需要通知CDN进行配合更改,原则上密文一旦确定尽量不要发生变动,不然可能导致源和加速节点使用的密文不一致,请求全部验证不通过
3)使用IP进行md5计算可能带来一些问题:如果加密使用的IP1,而到CDN这边用的是另外一个IP2,这样就会被禁止访问。
回源鉴权防盗链
原理:
1、陪玩游戏系统终端用户向CDN请求内容,在请求中携带需要回源鉴权的参数。
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、该鉴权形式客户需要陪玩游戏系统维护专门的鉴权服务器。
声明:本文由云豹科技转发自巨松9011博客,如有侵权请联系作者删除