点播文件防盗链二三事

作者:杨洁勇

导语

视频点播为公司大部分流媒体和音视频相关的业务提供上传、存储和下载等需求。所有文件存储在相同的仓库,提供CDN下载服务的oc节点也是共用的,所以存在各个各样的盗链问题。

1、背景介绍

于所有业务的文件都存储ftn,并且下载时提供CDN下载服务的OC节点也是相同的,所以为了识别某个下载链接是那个业务的,我们提供给业务的下载链接都会有一个相应的host用于识别各个业务(没有带上或者带上的host在下载服务没配置,直接禁止访问)。

为了防止用户或者黑客获取到下载链接后恶意访问文件,每个下载链接的url中都会带上一个vkey参数,里面包含了当前这个链接访问文件名hash值、vkey的生成时间、vkey的有效时长、通过此链接下载文件是否进行限速,当然这一切都是以一个不公开的算法加了密的。服务端收到下载请求后会解密vkey,并且对信息进行校验,限速,通过进行下一步给客户端吐数据,如果校验不通过,直接返回403.。下载链接如下:http://ip (or 域名)/host/filename?vkey

2、问题描述

首先所有文件都存储ftn,并且下载时提供CDN下载服务的OC节点也是相同的,并且除了音乐业务有自己单独的一套vkey校验库外(音乐vkey也是个坑,下面描述),其他业务(包括腾讯视频)都是用同一套vkey校验库,这就为盗链的存在提供了巨大的隐患。

1、通用的vkey算法被破解,或者一些腾讯视频精品库(付费会员才能观看)的文件对应vkey被获取后非法盗用,这时,恶意用户就可以利用这些漏洞,盗播腾讯视频精品库等内容(音乐同理)。

2、由于所有文件都存储ftn,并且下载时提供CDN下载服务的OC节点也是相同的,所有恶意用户可以利用任意业务的host下载任意业务文件(只要能正确生成vkey或获取vkey)。

3、音乐vkey校验算法没有校验文件名,也就是说获取到音乐的vkey后,可以利用音乐host下载任意业务文件。

4、音乐的vkey校验算法除了没有校验文件名之外,其实跟通过算法相同,也就是说拿到通用vkey,可以利用音乐的host下载任意文件。

3、解决措施

1、针对vkey被破解方法,这个是一个效率与安全的博弈论。或许最简单的方法是用公私秘钥(或者AES),这时候客户端知道算法也无法伪造vkey,但是公私秘钥加解密和签名耗cpu,并且要全网部署相关秘钥,怎么防止全网几千台服务秘钥不泄露等问题。通过腾讯视频播放页面或者正确的秘钥,这个更是无法阻止了,因为客户端可以任意抓包,总能获取到的下载的url。实际上也无法完全禁止文件被盗播。

那么先解决重点问题,点播这边最大的问题就是腾讯视频的精品库被盗播,利用腾讯视频自己的host和相关vkey,多次盗播视频这个问题,DC和CDN(OC)全部对腾讯视频的host接入腾讯视频那边的异步盗链打击,防止恶意用户利用腾讯视频的host盗播精品库。具体参考文章视频防盗链阶段总结。

2、针对获取到vkey后,利用非腾讯视频的host访问精品库问题,这时候这些host都死非腾讯视频业务,不能接入腾讯视频的异步防盗链打击。但是,正是由于他们是非腾讯视频host访问腾讯视频业务文件,所有禁止他们访问腾讯视频文件或者让它们只能访问自己的业务文件就解决了问题。

个业务接入时,我们都会为业务提供一个业务id(大业务不止一个,可能有多个),在源站是,但是CDN oc节点上无法获取文件对应的bizid(DC能从ftn获取到文件相关bizid),也就无法限制host访问相关文件。无法识别bizid,有没有办法从文件名识别是否为腾讯视频的文件。其实,最后就是根据文件名的规则识别为腾讯视频文件,最后全网禁止非腾讯视频的host访问腾讯视频文件。 并且腾讯视频自己启用新的vkey校验库,独立一套校验库算法。

3、点播业务除了腾讯视频,还有两大业务,音乐和空间。前面说了音乐的vkey校验没有校验文件名,拿到一个合法(或者自己生成)音乐vkey,通过音乐就可以访问任意业务视频文件(当然访问腾讯视频文件已经被我们通过识别腾讯视频文件名禁止掉了)。这样音乐的host就可能被利用来播放空间的视频文件(特别是带颜色的小视频)。

针对这种情况,首先源站的可以获取到文件对应的bizid,发现通过音乐host访问非音乐文件(bizid),直接禁止访问。那么CDN的OC节点呢,实际上空间视频的文件命名上已经呆了bizid,所有OC节点也能根据文件名知道相关bizid,禁止音乐盗播空间视频。(现在我们接入的业务都是要求文件命名问 bizid_uuid,4位+32位,但是腾讯视频和音乐文件属于比较先接入业务,命名没根据这个规则了,所以才有了前面第2点,根据腾讯视频其他规则来限制他被其他业务host盗播)。

4、效果与进展

图1和图2为非腾讯视频vcloud添加vid+后缀做限制,不允许访问腾讯视频文件。图2波动由于5月6日禁用一些音乐回源host,盗链全部换到dl.stream这个host引起。图3是源站限制host只能访问其相关的bizid文件之后音乐回源(源站dchttp)host盗链流量掉底。

图1

图2

图3

5、后续措施

A业务的host去盗播B业务的文件,此时,如果能识别通过文件名获取到任意一个业务的bizid,就能禁止这种现象。如A业务文件能获取到对应bizida,现在A的host只能访问bizida的文件;如果如B业务文件能获取到对应bizidb,禁止bizidb文件被A业务host访问。但是,如果出现无法从文件名中直接获取任意一个业务的id,就无法通过bizid禁止这种不同业务之间的盗播。所以,在内存允许的情况下,在OC缓存节点的filemgr(文件索引管理中记录每个文件的bizid),就可以做到业务之间不相互盗播文件。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏EAWorld

建设DevOps统一运维监控平台,全面的系统监控你做好了吗?

前言 随着Devops、云计算、微服务、容器等理念的逐步落地和大力发展,机器越来越多,应用越来越多,服务越来越微,应用运行基础环境越来多样化,容器、虚拟机、物理...

94750
来自专栏xingoo, 一个梦想做发明家的程序员

【插件开发】—— 1 Eclipse插件开发导盲

在真正接触eclipse插件开发一个月后,对插件的开发过程以及技术要求,也有了一定的了解。遥想之前像无头苍蝇一样乱撞乱学,真心觉得浪费了不少时间。这里就总结...

41990
来自专栏微服务

电商前端交易型系统设计原则

个人认为设计系统要因场景因时间而异,一个系统不是一下子就设计的非常完美,在有限的资源情况下一定是先解决当下最核心的问题,并预测/发现未来可能出现的问题,一步步解...

10810
来自专栏SEO

SEO常见疑问整理总结(一)

34070
来自专栏大前端开发

从编程小白到全栈开发:数据 (1)

有些事情时刻都在发生,但是我们通常很少意识到它们的存在。比如,当我们使用网页或移动应用的时候,其实在不断的产生着数据:注册一个网站或app的账号、发一条微博、写...

10630
来自专栏Java学习网

开发人员必备技能之一“性能优化”

软件程序的性能问题在设计价段就应该有充分的考虑,根据实际需求制定对应的技术方案和实现方法,比如软件运行后的并发用户数、数据存储量等要求;通常所说的性能优化无非是...

34850
来自专栏王亚昌的专栏

UNIX编程艺术之“模块性”

     本章主要讨论模块划分、接口设计,提出了几个很重要的概念,包括紧凑性、正交性、自顶向下和自底向上的设计、SPOT原则、分层、插件化。下面就这几个概念,谈...

11020
来自专栏高性能服务器开发

1 游戏服务器开发的基本体系与服务器端开发的一些建议

近年来,我身边的朋友有很多都从web转向了游戏开发。他们以前都没有做过游戏服务器开发,更谈不上什么经验,而从网上找的例子或游戏方面的知识,又是那么的少,那么的零...

73630
来自专栏web前端教室

《vue+vant+node+mongoDB+koa2》电商项目实战连载(1)

每节课程规划是大概12-15分钟左右,是以功能点来划分课程的节奏。预计总课时数大概40节左右吧,看实际情况吧。

17720
来自专栏DevOps时代的专栏

特性分支与特性开关哪家强?

合并冲突 新产品研发初期代码量较少,团队规模也不大,这种时候并不需要太多正式流程。 然而,即使一个团队只有两名开发人员,为了有效避免冲突,仍然建议不要在同时对...

22670

扫码关注云+社区

领取腾讯云代金券