防盗链计算

最近更新时间:2019-08-06 16:41:17

安全防盗链是指推流和播放 URL 中的 txSecret 字段,它的作用是防止攻击者伪造您的后台生成推流 URL 或者非法盗取您的播放地址进行谋利。

安全原理

为了不让攻击者伪造您的服务器生成推流和播放 URL,您可以通过在直播管理控制台配置防盗链加密 KEY(请勿轻易泄露,以防被攻击者获取),使得攻击者无法轻易伪造出有效的推流和播放 URL,如下图所示:

计算过程

  • 第一步:交换密钥
    首先,您需要在官网的控制台配置一个加密密钥,这个加密密钥用于在您的服务器上生成防盗链签名,由于腾讯云跟您持有同样的密钥,所以您生成的防盗链签名,腾讯云是可以进行解密确认的。

    加密密钥分为推流防盗链 KEY 和播放防盗链 KEY,前者用于生成推流防盗链 URL,后者用于生成播放防盗 URL。进入【云直播控制台】,在【域名管理】中单击对应的域名或【管理】,选择【推流配置】即可以自助配置推流防盗链 KEY,如图所示:

    关于播放防盗链 KEY 的相关信息,可以查看文档 最佳实践 - 直播播放

  • 第二步 :生成 txTime
    签名中明文部分为 txTime,含义是该链接的有效期,例如当前的时间是2018-12-29 11:13:45,而且期望新生成的 URL 是在3小时后即作废,那么 txTime 就可以设置为2018-12-29 14:13:45。
    不过这么长一串时间字符串放在 URL 里显然不太合适,实际使用中我们是把2018-12-29 14:13:45转换成 UNIX 时间戳,也就是1546064025(转换方式各种后台编程语言都由直接可用的时间函数来处理),然后转换成十六进制以进一步压缩字符长度,也就是 txTime = 1546064025(十进制) = 5C271099(十六进制),当然,使用十进制也是支持的。

    注意:

    我们建议您设置的 txTime 过期时间不要过长或过短:

    • 如果过期时间过短,当主播在直播过程中遭遇网络闪断时,会因为推流 URL 过期而无法恢复推流。
    • 如果过期时间过长,存在被盗推的风险。
  • 第三步:生成 txSecret
    txSecret 的生成方法是 = MD5(KEY + StreamName + txTime),这里的 KEY 就是您在第一步中配置的加密 KEY, StreamName(也叫流 ID,推荐用随机数字或者用户 ID)在本例中为 test,txTime 为刚才计算的 5C271099,MD5 即标准的 MD5 单向不可逆哈希算法。
    例如:

    KEY 为 e12c46f2612d5106e2034781ab261ca3
    则 txSecret = MD5(e12c46f2612d5106e2034781ab261ca3test5C271099) = f85a2ab363fe4deaffef9754d79da6fe
  • 第四步:合成防盗链地址
    符合腾讯云标准的推流 URL,它由下面四个部分组成:

    现在我们有推流(或播放)可以用来告知腾讯云该 URL 过期时间的 txTime,只有腾讯云才能解密并且验证的 txSecret,StreamName 以及推流域名(假设为 livepush.tcloud.com),那么我们就可以合作一条标准的 URL。在本文档的例子中,推流 URL 为:

    rtmp://livepush.tcloud.com/live/test?txSecret=f85a2ab363fe4deaffef9754d79da6fe&txTime=5C271099

示例代码

【云直播控制台】>【域名管理】,选中事先配置的推流域名,【管理】>【推流配置】页面下半部分有【推流地址示例代码】(PHP 和 Java 两个版本)演示如何生成防盗链地址。