您的位置:首页 > 其它

时间戳防盗链

2016-09-07 18:23 381 查看
首先上代码:

<?php
$url="rtmp://pili-live-rtmp.pili.echohu.top/1314xicong/hellolll";
$path=parse_url ($url);
$path=$path["path"];
$urls = explode("?", $url);
$time = time();
$T=dechex($time);
$key="huxicong";
$S=$key.$path.$T;
$token = md5($S);
$sign =strtolower($token);
if(isset($urls[1])){
$url = $url."&sign=".$sign."&t=".$T;
echo($url);
}else{
$url = $url."?sign=".$sign."&t=".$T;
echo($url);
}


/*

rtmp://pili-live-rtmp.pili.echohu.top

二、算法说明

基于时间戳的防盗链是通过对时间有关的字符串进行签名,将时间、签名通过一定的方式传递给

CDN服务器作为判定依据,CDN边缘节点根据约定的算法判断来访URL是否有访问权限。

通过,执行下一步;不通过,响应HTTP status code 403。

若同时配置了Referer、UA防盗链、时间戳防盗链,有一项不满足条件,即为不通过,响应 403 。

签名参数

● T:URL过期时间。按unix_time的16进制小写形式表示。 如 2015-08-01 00:00:00 –>

1438358400 –> 55bb9b80

● key: 和CDN协商的加密字符串

● path:访问资源的URL中的路径部分,例如:访问的URL为http://xxx.yyy.com/DIR1/dir2/

vodfile.mp4?v=1.1,则path=/DIR1/dir2/vodfile.mp4(注意不含querystring部分)

● 签名字原始符串S=key + path + T

● 签名SIGN=md5(S).to_lower(),to_lower指将字符串转换为小写

例如:访问的URL为 http://xxx.yyy.com/DIR1/dir2/vodfile.mp4?v=1.1,假设key=12345678,T=55bb9b80,
则S=12345678/DIR1/dir2/vodfile.mp455bb9b80,SIGN=19eb212771e87cc3d478b9f32d6c7bf9

签名参数传递方式

作为URL查询参数。

例如原始访问的URL为: http://xxx.yyy.com/DIR1/dir2/vodfile.mp4?v=1.1
最终形成的访问URL为: http://xxx.yyy.com/DIR1/dir2/vodfile.mp4?v=1.1&sign=<SIGN>&t=<T>
● 签名参数 sign、 t ;

● <SIGN>、<T> 替换为对应的值, 实际url中不含<> ;

/DIR1/dir2/vodfile.mp4?sign=83a880fd7aa06f3d3c6caa54d8f164ec&t=55bbefe0

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: