素材牛VIP会员
怎么防止盗链?
 风***j  分类:PHP代码  人气:1187  回帖:6  发布于6年前 收藏

我自己做了个小服务器,里面有几个http……m3u8是我花钱买的,还挺贵的,服务商没有盗链选项。
我自己怎么把这个加密了,然后发到我的页面呢?

 标签:htmljavascriptphp

讨论这个帖子(6)垃圾回帖将一律封号处理……

Lv5 码农
钢***侠 Web前端工程师 6年前#1

判断一下请求的Referer

Lv6 码匠
风***人 技术总监 6年前#2

对网络静态资源的防盗链控制,一般都是通过过滤来源来设置的。

location ~* \.(m3u8)$ {
    valid_referers none blocked *.your-site.com server_names ~\.google\. ~\.baidu\.;
    if ($invalid_referer) {
        return 403;
        #rewrite ^/ http://www.ttlsa.com/403.jpg;
    }
}

none:表示无Referer值的情况。
blocked:表示Referer值被防火墙进行伪装。
server_names:表示一个或多个主机名称。
当不满足访问条件时,$invalid_referer值为1。
望采纳。

Lv6 码匠
小***6 JS工程师 6年前#3

关于直播/点播防盗的问题,是一个行业普遍存在的大问题,到目前为止也没有特别有效的商用解决方案,或者因为解决方案的成本太高而没有被商用。

下面简单说说目前市面上常见的防盗手段:
1.设置 referer 白名单,非白名单内的一律拒绝访问
2.在 URL 中添加 token 校验,使用私有 key 和 time 实时计算 token,服务器作校验
3.在第2条的基础上,使用 https POST token 参数,增加抓取难度
4.使用 HLS(m3u8) 自带的加密功能,加密传输数据,没有密码无法播放
5.使用数字版权保护(DRM)技术

还有一些不太常见的手段:
1.使用HTTPS客户端证书,服务器可以对客户端进行识别(目前常见的HTTPS是服务器端证书)
2.使用HLS(m3u8)自带的加密功能,并对密码做二次处理,客户端经过两次解密才能得到原数据
3.对视频编码进行二次处理,解码时需要知道算法,否则无数得到原数据,见于海康监控系统

以上所有提到的这些技术,也只是在一定程度上提高了破解的难度,并不能保证100%有效;当然,现实问题是,只要防盗技术能够阻挡破解者一段时间,等待新的防盗技术到来即可。
如果你只是自己用,那就放在私网上,或者在公网上限定指定IP访问,这样会省去很多麻烦。

Lv4 码徒
54***66 学生 6年前#4
  1. 使用nginx自带的防盗链,处理非自己域名下的非法连接
  2. 使用的模块
http_secure_link_module  web中间件自带参数验证模块

nginx.conf配置文件Server里面加一段location

location ~*\.(m3u8|M3U8) {
                secure_link $arg_st,$arg_e;
                secure_link_md5 video$uri$arg_e;

                if ($secure_link = "") {
                        return 403;
                }

                if ($secure_link = "0") {
                        return 403;
                }
        }

PHP代码

<?php

 $secret = 'video'; # 密钥
 $path = '/video/video.m3u8'; # # 访问的文件
 $expire = time()+300; # 访问到期时间,time是当前时间,300表示300秒,也就是说从现在到300秒之内访问不过期,过期显示404
 # 用文件路径、密钥、过期时间生成加密串
 $md5 = base64_encode(md5($secret . $path . $expire, true));
 $md5 = strtr($md5, '+/', '-_');
 $md5 = str_replace('=', '', $md5);

# 加密后的下载地址
 echo '<a href="http://localhost/video/video.m3u8?st='.$md5.'&e='.$expire.'">video.m3u8</a>';
 echo '<br>http://localhost/video/video.m3u8?st='.$md5.'&e='.$expire;
Lv7 码师
un***oo 职业无 6年前#5

nginx设置HTTP_REFERER,采用白名单。

Lv5 码农
qw***23 JAVA开发工程师 6年前#6

我们又拍云有提供域名的 referer 防盗链,还有实用性更强的 token 防盗链。关于 Token 防盗链,这里简单贴下算法说明。

详情了解:Token 防盗链详解

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取