目前在关注防盗链问题,因为动不动就遇见有人被刷流量,而且很难避免。特别很多站长用上了cdn却没有上防盗链。现在基本上任何一家都有防盗链的设置,做好预防很重要。特别目前的cdn厂商都是基本没什么提示的,被刷了可能也要一两天时间,足够不怀好意的人干很多事了。
其中七牛阿里被吐槽的最多,理由我觉得也很简单,用的人数多,加上这两家也明显不想设置流量计算的带宽限制。阿里好点可以带宽计费,而且可以设置监控。七牛就有点坑了。。。
这里说一下七牛和又拍的时间戳防盗链(又拍叫做token防盗链)。原理就是你指定链接过期时间+文件的url+你的key 这三者md5加密 然后来防止被人长期盗链,针对采集。好处是资源只能存活有限时间,如果要继续查看必须要在我们网站上获得新的链接,缺点是每次都要计算要消耗一定的资源。
又拍算法
下面是又拍的算法
$etime = time() + 600; // 授权十分钟后过期 $key = 'alibaba'; // token 防盗链密钥 $path = '/wp-content/uploads/2018/02/qiniu-409x220.png'; // 图片相对路径 $sign = substr(md5($key.'&'.$etime.'&'.$path), 12,8).$etime; echo $sign;值得注意的是,当你开启token防盗链的时候,域名防盗链最好关了,因为这两者是同时生效的(又拍也没说清楚,巨坑)。有一点值得夸奖就是,设置下去的生效速度,又拍几乎是秒级生效,效果明显,然而我们的七牛大概一周 (
七牛算法
下面是七牛的时间戳算法,url和key改成你自己的。
$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); }七牛的话 需要注意的是
如果你访问的资源后面没有任何?xxx的话,需要加?sign而不是&sign,这个是个巨坑,大家注意啊!!!