更新时间:2023-01-04 10:29:04
防盗链的目的是为了确保内容提供商的内容资源在经过CDN分发时不被其他人恶意的引用或者被非法用户下载,从而确保服务的安全性以及避免产生不必要的带宽浪费,为内容提供商节约成本。
根据防盗链规则的复杂程度,网宿的直播防盗链功能可以分为基础防盗链和高级防盗链两大类,可以满足绝大部分客户不同业务不同场景的防盗链需要。
防盗链是防止被盗链的有效措施,其不仅可以帮助客户,防止其直播内容被未授权的第三方盗取使用,也可以帮助客户防止其加速域名在客户不知情的情况下被第三方使用。这不仅可以保护客户的自主知识产权不被不法分子侵害,也可以有效地帮助客户减少因盗链产生的损失,建议所有客户配置。
基础防盗链主要是针对客户端请求过程中所携带的一些关键信息来验证请求的合法性,比如客户端请求IP,请求URL中携带的referer。优点是规则简单,配置和使用都很方便,缺点是防盗链所依赖的验证信息很多都是可以伪造的,因此此类防盗链可靠性较低。
原理:
IP地址在互联网上具有唯一性,客户端向服务端(CDN节点)发起请求时,服务端可以明确获取到客户端的IP地址,因此可以利用IP地址的这些特点进行访问控制。
适用场景举例:
1)发现某些IP地址访问次数巨大,属于不正常的访问或者可能是某种攻击行为,这种情况下可以考虑将该IP地址加入黑名单,此IP地址访问到CDN的节点时会被直接拒绝。
2)加速的内容属于公司或者企业的员工内部使用,不希望被企业之外的其他人访问到。企业通常有固定统一的出口IP地址,因此可以将这些出口IP加入白名单,只允许白名单中的IP访问,其他所有IP都将被拒绝。
3)有些特殊的资源只希望北京地区的用户使用,禁止其他地区的用户使用,可以使用地区访问许可的功能。
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防盗链安全性较低。
流媒体直播中,高级防盗链主要是指时间戳防盗链、回源鉴权防盗链。
时间戳防盗链的特点是加密的url具有时效性,无法伪造,当达到过期时间后url不再被允许访问,适合一些对“时效性”有要求的场景,使用时需要内容提供商和CDN配合,内容提供商负责生成加密的url,CDN负责根据预先设定的规则对url进行合法性验证。时间戳防盗链由于实现原理简单、可靠性高,推荐使用。
回源鉴权的特点是CDN节点每次接收到的请求,都需要先回源进行验证,验证通过后才认为请求合法,继续提供服务,适用于对防盗链有很高的实时性要求的场景。另外,一些特殊性的防盗链,CDN默认不支持的情况下也可以考虑采用回源鉴权的形式。
原理:
1、当用户发起请求时视频请求时,用户的请求会被引导至客户源站。例如,终端用户发起的请求url为:http://www.example.com/test.flv
2、客户源站通过一系列参数共同加密生成一串密文。
3、终端用户利用客户源站返回的url,重新向网宿节点发起请求。
4、网宿节点进行验证:请求是否过期以及加密串是否匹配。
注意:上述原理中,客户源站的角色也可以替换为客户播放终端,由播放终端通过一系列参数共同加密生成一串密文,使用加密后的url向网宿节点发起请求。
示例
1、配置实例如下:
防盗链参数 | 描述 | 补充说明 |
---|---|---|
wsTime | 播放 URL 的有效时间 | 格式为16进制/10进制 UNIX 时间。 |
KEY | MD5 计算方式的密钥 | 可以自定义。 |
wsSecret | 播放 URL 中的加密参数 | 值是通过将 key,URI,wsTime 依次拼接的字符串进行 MD5 加密算法得出。wsSecret = MD5(key+URI+wsTime)。 |
有效时间 | 地址有效时间 | 有效时间设置必须大于0。假设 wsTime 设置为当前时间,有效时间设置为500s,则播放 URL 过期时间为当前时间 + 500s。 |
2、时间戳访问url生成规则示例:
1) 原始url:http://cdn.wangsu.com/4/123.mp3
2) 加密key:wangsu
3) 访问时刻unix时间为: 1601026312
4) 路径:URI,需加上斜杠, /4/123.mp3
5) wsSecret签名字符串:key+路径+时间 即:wangsu/4/123.mp31601026312
6) wsSecret签名字符串计算md5hash。
wsSecret = md5sum("wangsu/4/123.mp31601026312 ") = 79aead3bd7b5db4adeffb93a010298b5
7)时间戳防盗链URL请求如下:
http://cdn.wangsu.com/4/123.mp3? wsSecret=79aead3bd7b5db4adeffb93a010298b5&wsTime=1601026312
8) 当用户发起带时间戳防盗链的url请求后,cdn服务器会对url内容进行校验,判断时间有效性及MD5值,两个值其中有一个不符合要求,返回403。
应用场景举例:
1、适用于对url有一定时效性的场景
2、如果在md5加密算法中添加客户端的ip,可以防止用户观看视频后直接将获取到的视频URL粘贴分享出去,提供给他人播放。客户端的ip也可以通过url中的参数传递。
注意事项:
1、时间戳防盗链默认支持,可以直接配置,不需要再次开发
2、当防盗链涉及的参数发生变更时,需要通知CDN进行配合更改,原则上密文一旦确定尽量不要发生变动,不然可能导致源和加速节点使用的密文不一致,请求全部验证不通过
原理:
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、该鉴权形式客户需要维护专门的鉴权服务器。