使用时间签名实现防盗链

防盗链的方法有很多种,但在网上看了诸多方法后都感觉无法真正实现防盗,所以对使用时间签名实现防盗链做了一个探索。我的要求是URI资源在今天可以访问,明天就失效。除了以天数来验证外,还可以使用小时来验证,又或者每三个小时验证。以时间签名的方法来实现防盗链可以使链接被盗的时候可以访问,每当过了指定时间,链接就无法访问。

入侵者如果要盗链,则需要获取$key来产生签名。

签名时间过程,以PHP代码为例:

// 防盗链加密
function en_sign(){
    $date = date("Ymd");
    $key = "TankDns-ganyaotong-859";
    $encrypt = openssl_encrypt($date, 'AES-128-ECB', $key, 0);
    return $encrypt;
}

// 防盗链解密
function de_sign($encrypt){
    $key = "TankDns-ganyaotong-859";
    $decrypt = openssl_decrypt($encrypt, 'AES-128-ECB', $key, 0);  
    return $decrypt;
}

$sign = en_sign();

我们需要把$sign放到链接的参数里面。

<link rel="stylesheet" type="text/css" href="link?t=css&f=css/index&sign={$sign}">

后台创建一个方法处理这个链接,判断是否为盗链。

$type = Request::param("t");
$file = Request::param("f");
$sign = Request::param("sign");
if(de_sign($sign)!=date("Ymd")){
    // 属于盗链
    return;
}

接下来,如果不是盗链,我们就加载请求文件。

$path = "static/".$file.".".$type; 
switch($type)
{
    case "css":
            return download($path, $file)->mimeType("text/css")->force(false);
        break;
}

总结:使用时间签名作为防盗链技术,可以控制时间的长度,你可以指定一分钟后失效,也可以指定一个小时后失效。使用时间签名的防盗链技术需要保证密钥$key不被入侵者窃取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值