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

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

  •  
  •   hyy1995 · 56 天前 · 3564 次点击
    这是一个创建于 56 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    老板看不下去了让我们去提高下防盗门槛,我们目前就想到对整个 m3u8 文件加密的这种方式,但我感觉也不太靠谱,唉
    hyy1995
        8
    hyy1995   56 天前
    @ysc3839

    确实防不了,但想提高下盗下成本,除了 drm 之外,有什么建议吗?
    hyy1995
        9
    hyy1995   56 天前
    @murmur

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

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

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

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

    ——

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

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

    我还以为是有什么神通广大的招数能直接拿到我们的 m3u8…
    systemcall
        24
    systemcall   56 天前 via Android
    @no1xsyzy HDCP 就安全吗?上采集卡,刷个固件照样采集
    蓝光播放机够理想了吧?用户连第三方软件都安装不了,整个设备都足够安全。照样可以被提取出来视频,只能提高一般人接触盗。版的难度
    网飞,也是一套 DRM,浏览器、操作系统、显示设备都有要求,还不是有盗。版的
    而且你把东西的门槛提得太高并不好,用户会用脚投票
    jingcoco
        25
    jingcoco   56 天前 via iPhone
    加水印?
    myCupOfTea
        26
    myCupOfTea   56 天前
    @hyy1995 付费播放是对 url 携带的 token 做了权限校验,其实 p 站除了付费的也是可以直接爬下来的,这东西不太好防(要不就是防御的成本过大)
    no1xsyzy
        27
    no1xsyzy   56 天前
    @systemcall #24 哦看了下 HDCP 技术细节,线性密钥是真的犯蠢了
    然后英特尔承认了主密钥泄漏还在做…… 向厂商收用户的智商税,最后还是用户买单(
    hornets
        28
    hornets   56 天前
    一般都是正常类似资源站之类的一个下载,或者录屏了,全都用一个资源,只有有利可图,就没有办法
    mrant
        29
    mrant   56 天前
    不知道怎么防,但是我知道 p 站视频用手机 uc 、qq 浏览器能下载;朋友买的付费视频课,我登录后他账号后用 uc 也能下载
    takemeaway
        30
    takemeaway   56 天前
    能播就能下,你问的是防止别的网站盗播吧?
    这个跟防盗链原理差不多,你可以多去了解一下
    buffzty
        31
    buffzty   56 天前
    防不了下载. 但是可以抓大鱼. 就像慕课平台视频 他里面每隔一段时间移动显示会员 id. 只要传播数量过大. 到时候报警就像.他收的钱最后还是要还回来. 你前端所有东西都相当于明文,不管你怎么传输,加密. 你的加密方式永远都会在前端找到
    Yutang
        32
    Yutang   56 天前
    M3U8 二级目录提供 ts 的下载链接,可以动态生成,多久后链接失效。各大视屏网站好像是这种。或者也可以客户端对 ts 链接进行处理之后,才是正确地址。感觉对 ts 链接做改动比较靠谱。
    youxiachai
        33
    youxiachai   56 天前
    国内网站都有备案。。。
    一告一个准。。。
    tankren
        34
    tankren   56 天前
    把对方网站搞了索赔巨额赔偿 杀鸡儆猴
    gelilaohuang
        35
    gelilaohuang   56 天前
    把链接发一下,我看看 一分钟之内能不能扒下来😁
    flowercoder
        36
    flowercoder   56 天前
    去 52 看下,前两天刚看一个基于 idm 的 m3u8 插件,比较靠谱的方式可以学下 heima,那家应该是被盗的最多的。还有就是账号实名制,法律协议加好,加本用户水印,这确实是一个相当靠谱的方法。
    kuner0614
        37
    kuner0614   56 天前
    你们公司可以自己做一个网站,学习盗版网站的经验,把盗版流量通过这个站点收回来,后台加一个看板。可以针对性的用这些人群来做数据分析分类营销,明面的钱和暗地的钱都能赚到。
    zhw2590582
        38
    zhw2590582   56 天前
    就算 m3u8 防得了,视频是肯定防不了,任何加密视频,我分分钟都能录下来
    yolee599
        39
    yolee599   56 天前
    换个思路,加隐形水印,即使录屏,水印也不能去除,发现盗版流出直接律师函,参考各个视频 APP 的收费播放。
    richChou
        40
    richChou   56 天前
    @murmur 我记得安卓客户端可以禁止录屏。不过拿其他设备翻录确实就没办法了。
    JCZ2MkKb5S8ZX9pq
        41
    JCZ2MkKb5S8ZX9pq   56 天前
    感觉除了定期嵌 ID 也没啥好办法,连 P 站 /mgstage/dmm 这种规模都防不了盗版……
    最近一次摸 ameba 的视频,是无法播放的 ts 片段,感觉也是前端加密而已。
    fengmumu
        42
    fengmumu   56 天前
    是这个逻辑,你们老板发现的是别人提供了下载工具,不是发售你们的视频,说明啥啊,你们做的不合理啊,要不要考虑一下 视频加水印,然后提供下载功能,毕竟有需求就总会有市场,索性你们直接把市场干死
    jon
        43
    jon   56 天前
    传播盗版发律师函呗
    Huang4966
        44
    Huang4966   56 天前
    我这边的方案是. 视频使用 hls 标准加密,切片脚本设置为每个视频单独生成解密 key 文件. 然后将生成的解密秘钥进行 base64_encode 存储到数据库. 切片后文件上传阿里云 OSS.
    Huang4966
        45
    Huang4966   56 天前
    我这边的方案是. 视频使用 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   56 天前
    自己做传输协议可以提高被下载的难度
    enrolls
        47
    enrolls   55 天前
    前端组装 m3u8 文件。目的是想防下载,那就提高下载的门槛,用速度,请求次数区分正常用户和非正常用户。
    myCupOfTea
        48
    myCupOfTea   54 天前
    @Huang4966 播放器能获得解密的 key,那就肯定可以爬下来的啊,我现在爬一些 ts 文件,只要顺便把 m3u8 描述里面的 key 文件顺便爬下来就好了
    Huang4966
        49
    Huang4966   54 天前
    @myCupOfTea 是的,key 是防范不了的.只要你有访问资源权限就可以获得. 只能通过对用户行为上进行区分,提高难度而已.
    myCupOfTea
        50
    myCupOfTea   54 天前
    @Huang4966 恩,我之前爬某网站发现,m3u8 里的切片会过一段时间就变名字,估计不会花大代价重新切片只是重命名而已,然后我把老的 ts 列表和新的 ts 列表按索引自动替换下继续下没下载好的(
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4298 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:54 · PVG 17:54 · LAX 02:54 · JFK 05:54
    ♥ Do have faith in what you're doing.