V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hyy1995
V2EX  ›  HLS

请教大家一个问题, m3u8 文件如何防下载

  •  1
     
  •   hyy1995 · 2020-08-30 19:23:05 +08:00 · 8909 次点击
    这是一个创建于 1540 天前的主题,其中的信息可能已经有所发展或是发生改变。

    小弟是前端,我司项目的视频资源都是用 m3u8 去播,m3u8 文件已经设置了#EXT-X-KEY,但还是能被别人破解下载下来(也不知道是不是后端搞的 key 姿势不对)。

    目前我们的处理方案是后端对整个 m3u8 文件进行一个加密(混淆字符什么的),然后前端播放的时候自己先解密得到真实的 m3u8 文件内容,再去播,不知道这样做管不管用。

    大家有什么好办法能够防止 m3u8 被破解下载呢?或者提高被破解的成本?

    第 1 条附言  ·  2020-08-30 20:17:46 +08:00
    我们目前的这种方法,对业务的改动较大,并且我个人觉得也不怎么靠谱。至于 drm 也上了,用的是腾讯云的,大家还有什么 drm 之外的防下载方式吗?

    盗版是阻止不了的,我们只求提高盗下成本就行…
    51 条回复    2024-02-19 05:28:35 +08:00
    delectate
        1
    delectate  
       2020-08-30 19:37:18 +08:00
    视频加 drm 。m3u8 被下载就下了吧。
    murmur
        2
    murmur  
       2020-08-30 19:38:43 +08:00   ❤️ 1
    没用的,你的东西如果值钱,抗得住录屏么
    crella
        3
    crella  
       2020-08-30 19:42:10 +08:00 via Android
    用 websocket 传输?
    yuzo555
        4
    yuzo555  
       2020-08-30 19:42:49 +08:00
    EXT-X-KEY 是 HLS 标准里面定义的加密。
    任何支持 M3U8 播放的播放器、下载工具都能正确处理 EXT-X-KEY 。
    这就像你给你家大门上了密码锁,然后密码用纸条写在了门上一样... 根本没用
    ysc3839
        5
    ysc3839  
       2020-08-30 19:56:07 +08:00 via Android
    防不了,就连 Netflix 这种用了 DRM 方案的都能被下载。
    8023
        6
    8023  
       2020-08-30 19:57:26 +08:00 via iPhone
    drm+1,但只要你的视频在客户端播放,就肯定没办法彻底放得住的。
    hyy1995
        7
    hyy1995  
    OP
       2020-08-30 20:13:11 +08:00
    @delectate
    @8023

    drm 已经加了,用的腾讯云的,但还是能被盗下,而且还直接放了个网站,能让用户自行操作就能下载的那种。

    老板看不下去了让我们去提高下防盗门槛,我们目前就想到对整个 m3u8 文件加密的这种方式,但我感觉也不太靠谱,唉
    hyy1995
        8
    hyy1995  
    OP
       2020-08-30 20:13:58 +08:00
    @ysc3839

    确实防不了,但想提高下盗下成本,除了 drm 之外,有什么建议吗?
    hyy1995
        9
    hyy1995  
    OP
       2020-08-30 20:15:33 +08:00
    @murmur

    哈哈,录屏这种就管不了了,现在已经有网站直接挂着我司的名字,提供一键下载视频的功能,并且还收费(几块钱那种),老板看不下去了。

    主要是想针对这种网站,提高盗下的成本
    heyjei
        10
    heyjei  
       2020-08-30 20:24:02 +08:00
    当做普通的反爬来处理不就好了嘛
    1. 如果有 IP 只下载视频或者 m3u8,不下载 js,css 文件的,肯定是爬虫,直接把 IP 封了吧;
    2. m3u8 的加密改成可配置的,3 天换一次加密方式,如果不是利润特别大的话,对方自己就会放弃的。
    martinsu
        11
    martinsu  
       2020-08-30 20:31:48 +08:00 via iPhone
    我觉得防盗方法不是用某一个高水平防盗方法。而是用一套中等水平的防盗方法,隔一段时间就改变规则让盗版手段失效,不断改,盗版者的手段不断失效,最后让盗版者精疲力尽放弃。
    greatbody
        12
    greatbody  
       2020-08-30 20:33:56 +08:00
    @martinsu 高招
    ochatokori
        13
    ochatokori  
       2020-08-30 20:37:28 +08:00 via Android
    @martinsu #11 这只是比谁的精力多,你只能上新的规则让盗版者的手段失效
    littlewing
        14
    littlewing  
       2020-08-30 21:16:38 +08:00
    在前端解密就不要想着能防破解了
    hyy1995
        15
    hyy1995  
    OP
       2020-08-30 21:21:35 +08:00
    @littlewing
    @heyjei
    @martinsu

    几位老哥,有个问题想请教一下。视频资源是付费的,没付费之前接口不返回 m3u8 的,前端也是不能播的,这样的话是如何被盗下的呢?
    gggxxxx
        16
    gggxxxx  
       2020-08-30 21:24:54 +08:00
    做盗版的账号是付费用户.....
    musi
        17
    musi  
       2020-08-30 21:27:16 +08:00
    可以看一下阿里云的付费点播
    luvroot
        18
    luvroot  
       2020-08-30 21:32:14 +08:00
    阿里云的 3 种 URL 鉴权方式,或则每次请求带 jwt token 过校验服务器。
    hyy1995
        19
    hyy1995  
    OP
       2020-08-30 21:38:17 +08:00
    @gggxxxx

    不太像,因为每个视频都需要单独付费的,有些视频单个都得几百元,他网站上面下载一次就收几块钱,能回本吗?不太可能
    fredcc
        20
    fredcc  
       2020-08-30 21:38:20 +08:00
    阿里云 CDN 不是有成品的防盗链么。分发 cdn 地址的接口做好验证,重放攻击这种都是起码的。然后把 CDN 防盗链 token 的失效时间设短点,再加上全局 token ip 限次差不多了。
    linuxvalue
        21
    linuxvalue  
       2020-08-30 22:59:14 +08:00
    对文件内容进行流加密 边解密边播 下载到本地的也是加密的
    no1xsyzy
        22
    no1xsyzy  
       2020-08-30 23:15:34 +08:00
    @hyy1995 #19 盲狙一个内鬼,不然就是你这边对于 DRM 的使用其实做的一塌糊涂。
    @murmur 录屏可以被 HDCP 抗,摄屏好像还有用亮暗噪点抗(视觉上不明显,但摄像机会认为亮度改变而自动修正,导致最后的摄屏结果不能看),但似乎又有对应的处理方式。

    ——

    现在是有真·DRM 方案的。可信计算 + HDCP,直到显示器显示出来为止完全处于加密状态。
    但是,相应地,真·DRM 的方案也有弊端,就是观看的平台被限定了。
    首先,ARM 杀一半;其次,Linux 杀大部分;然后 HDCP 杀掉部分显示器(自组别想了);最后,代码不能直接访问 IO (所以游戏别想了)。
    就是你只能带上那群组织提供的整套方案,在你的整个设备和接口中硬嵌另一套设备和接口(或者说,后门)进去。
    这些后门价格不高,几乎白送,就是为了让 DRM 内容能够播放。
    hyy1995
        23
    hyy1995  
    OP
       2020-08-30 23:38:33 +08:00
    @gggxxxx
    @no1xsyzy

    是我搞错了。其实那些盗下网站要求的是自己已购的视频才行,相当于是花了钱买视频,然后想下到本地看…

    我还以为是有什么神通广大的招数能直接拿到我们的 m3u8…
    systemcall
        24
    systemcall  
       2020-08-31 00:45:19 +08:00 via Android
    @no1xsyzy HDCP 就安全吗?上采集卡,刷个固件照样采集
    蓝光播放机够理想了吧?用户连第三方软件都安装不了,整个设备都足够安全。照样可以被提取出来视频,只能提高一般人接触盗。版的难度
    网飞,也是一套 DRM,浏览器、操作系统、显示设备都有要求,还不是有盗。版的
    而且你把东西的门槛提得太高并不好,用户会用脚投票
    jingcoco
        25
    jingcoco  
       2020-08-31 08:04:20 +08:00 via iPhone
    加水印?
    myCupOfTea
        26
    myCupOfTea  
       2020-08-31 08:37:27 +08:00
    @hyy1995 付费播放是对 url 携带的 token 做了权限校验,其实 p 站除了付费的也是可以直接爬下来的,这东西不太好防(要不就是防御的成本过大)
    no1xsyzy
        27
    no1xsyzy  
       2020-08-31 09:17:16 +08:00
    @systemcall #24 哦看了下 HDCP 技术细节,线性密钥是真的犯蠢了
    然后英特尔承认了主密钥泄漏还在做…… 向厂商收用户的智商税,最后还是用户买单(
    hornets
        28
    hornets  
       2020-08-31 09:29:13 +08:00
    一般都是正常类似资源站之类的一个下载,或者录屏了,全都用一个资源,只有有利可图,就没有办法
    uTuw2C6uf964Kx6o
        29
    uTuw2C6uf964Kx6o  
       2020-08-31 09:43:03 +08:00
    不知道怎么防,但是我知道 p 站视频用手机 uc 、qq 浏览器能下载;朋友买的付费视频课,我登录后他账号后用 uc 也能下载
    takemeaway
        30
    takemeaway  
       2020-08-31 10:00:29 +08:00
    能播就能下,你问的是防止别的网站盗播吧?
    这个跟防盗链原理差不多,你可以多去了解一下
    buffzty
        31
    buffzty  
       2020-08-31 10:43:19 +08:00
    防不了下载. 但是可以抓大鱼. 就像慕课平台视频 他里面每隔一段时间移动显示会员 id. 只要传播数量过大. 到时候报警就像.他收的钱最后还是要还回来. 你前端所有东西都相当于明文,不管你怎么传输,加密. 你的加密方式永远都会在前端找到
    Yutang
        32
    Yutang  
       2020-08-31 10:53:32 +08:00
    M3U8 二级目录提供 ts 的下载链接,可以动态生成,多久后链接失效。各大视屏网站好像是这种。或者也可以客户端对 ts 链接进行处理之后,才是正确地址。感觉对 ts 链接做改动比较靠谱。
    youxiachai
        33
    youxiachai  
       2020-08-31 11:18:07 +08:00
    国内网站都有备案。。。
    一告一个准。。。
    tankren
        34
    tankren  
       2020-08-31 11:28:39 +08:00
    把对方网站搞了索赔巨额赔偿 杀鸡儆猴
    gelilaohuang
        35
    gelilaohuang  
       2020-08-31 11:40:26 +08:00
    把链接发一下,我看看 一分钟之内能不能扒下来😁
    flowercoder
        36
    flowercoder  
       2020-08-31 11:58:22 +08:00
    去 52 看下,前两天刚看一个基于 idm 的 m3u8 插件,比较靠谱的方式可以学下 heima,那家应该是被盗的最多的。还有就是账号实名制,法律协议加好,加本用户水印,这确实是一个相当靠谱的方法。
    kuner0614
        37
    kuner0614  
       2020-08-31 12:07:55 +08:00
    你们公司可以自己做一个网站,学习盗版网站的经验,把盗版流量通过这个站点收回来,后台加一个看板。可以针对性的用这些人群来做数据分析分类营销,明面的钱和暗地的钱都能赚到。
    zhw2590582
        38
    zhw2590582  
       2020-08-31 12:11:41 +08:00
    就算 m3u8 防得了,视频是肯定防不了,任何加密视频,我分分钟都能录下来
    yolee599
        39
    yolee599  
       2020-08-31 12:16:55 +08:00
    换个思路,加隐形水印,即使录屏,水印也不能去除,发现盗版流出直接律师函,参考各个视频 APP 的收费播放。
    richChou
        40
    richChou  
       2020-08-31 13:33:48 +08:00
    @murmur 我记得安卓客户端可以禁止录屏。不过拿其他设备翻录确实就没办法了。
    JCZ2MkKb5S8ZX9pq
        41
    JCZ2MkKb5S8ZX9pq  
       2020-08-31 13:58:20 +08:00
    感觉除了定期嵌 ID 也没啥好办法,连 P 站 /mgstage/dmm 这种规模都防不了盗版……
    最近一次摸 ameba 的视频,是无法播放的 ts 片段,感觉也是前端加密而已。
    fengmumu
        42
    fengmumu  
       2020-08-31 15:09:16 +08:00
    是这个逻辑,你们老板发现的是别人提供了下载工具,不是发售你们的视频,说明啥啊,你们做的不合理啊,要不要考虑一下 视频加水印,然后提供下载功能,毕竟有需求就总会有市场,索性你们直接把市场干死
    jon
        43
    jon  
       2020-08-31 15:17:22 +08:00
    传播盗版发律师函呗
    Huang4966
        44
    Huang4966  
       2020-08-31 15:48:44 +08:00
    我这边的方案是. 视频使用 hls 标准加密,切片脚本设置为每个视频单独生成解密 key 文件. 然后将生成的解密秘钥进行 base64_encode 存储到数据库. 切片后文件上传阿里云 OSS.
    Huang4966
        45
    Huang4966  
       2020-08-31 15:58:27 +08:00
    我这边的方案是. 视频使用 hls 标准加密. 需要用到阿里云 OSS, 阿里云 CDN 重写,FFmpeg 切片.
    1.在使用 FFmpeg 切片时,切片脚本设置为每个视频单独生成解密 key 文件. 并 base64_encode 存储数据库
    2.同时切片配置信息的#EXT-X-KEY 设置为进行播放鉴权的 url
    3.切片后文件上传阿里云 OSS 并对播放域名开启 CDN 鉴权
    4.后端返回前端 m3u8 文件地址时,在地址后面加上当前请求播放用户的加密信息.
    5.播放器使用 m3u8 获取 ts 文件时,触发阿里云 cdn 重写,将加密用户信息提交到自己设置的鉴权中心
    6.鉴权中心,对用户身份,视频播放有效期,请求次数进行鉴权后,从数据库取出 key 字段进行 base64_decode 解密
    7.播放器获得解密 key 进行播放

    以上可以用户在获取 m3u8 和播放时都需要进行鉴权,同时都有时效限制.每个视频也都是不同秘钥.可以提高下载门槛
    如果前端功底好的话可以在播放器 js 中进行对 m3u8 的操作进一步提高安全性.
    luwies
        46
    luwies  
       2020-08-31 17:29:10 +08:00
    自己做传输协议可以提高被下载的难度
    enrolls
        47
    enrolls  
       2020-08-31 19:54:50 +08:00
    前端组装 m3u8 文件。目的是想防下载,那就提高下载的门槛,用速度,请求次数区分正常用户和非正常用户。
    myCupOfTea
        48
    myCupOfTea  
       2020-09-02 09:40:13 +08:00
    @Huang4966 播放器能获得解密的 key,那就肯定可以爬下来的啊,我现在爬一些 ts 文件,只要顺便把 m3u8 描述里面的 key 文件顺便爬下来就好了
    Huang4966
        49
    Huang4966  
       2020-09-02 09:46:43 +08:00
    @myCupOfTea 是的,key 是防范不了的.只要你有访问资源权限就可以获得. 只能通过对用户行为上进行区分,提高难度而已.
    myCupOfTea
        50
    myCupOfTea  
       2020-09-02 13:53:59 +08:00
    @Huang4966 恩,我之前爬某网站发现,m3u8 里的切片会过一段时间就变名字,估计不会花大代价重新切片只是重命名而已,然后我把老的 ts 列表和新的 ts 列表按索引自动替换下继续下没下载好的(
    dxppp
        51
    dxppp  
       273 天前 via iPhone
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4019 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:21 · PVG 18:21 · LAX 02:21 · JFK 05:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.