php时间戳防盗链,时间戳防盗链鉴权php实现

$url="http://domain/1.png?v=1";

$url = explode("?", $url);

$path=basename($url[0]);

$path="/".$path;

$time = time()+3600;

$T=dechex($time);

$key="xxxx";

$S=$key.$path.$T;

$token = md5($S);

$sign =strtolower($token);

if(isset($url[1])){

$url = "http://domain".$path."?".$url[1]."&sign=".$sign."&t=".$T;

echo($url);

}else{

$url = "http://domain".$path."?sign=".$sign."&t=".$T;

echo($url);

}

/*

二、算法说明

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

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=&t=

● 签名参数 sign、 t ;

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

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

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值