我自己做了个小服务器,里面有几个http……m3u8是我花钱买的,还挺贵的,服务商没有盗链选项。
我自己怎么把这个加密了,然后发到我的页面呢?
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;
对网络静态资源的防盗链控制,一般都是通过过滤来源来设置的。
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。
望采纳。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
关于直播/点播防盗的问题,是一个行业普遍存在的大问题,到目前为止也没有特别有效的商用解决方案,或者因为解决方案的成本太高而没有被商用。
下面简单说说目前市面上常见的防盗手段:
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访问,这样会省去很多麻烦。