【七牛雲】時間戳防盜鏈鑑權php實現

基於時間戳防盜鏈的功能其實每家的CDN都是支持的。主要是經過使用約定的加密字符串來對具備訪問有效期的資源連接進行一些加密計算的到一個sign值,而後訪問外鏈裏面帶上這個sign和截止時間戳去訪問CDN的節點,CDN的節點會用一樣的算法來計算訪問連接是否合法,若是不合法則返回403 Forbidden,不然返回所要訪問的資源。php

算法說明golang

基於時間戳的防盜鏈是經過對時間有關的字符串進行簽名,將時間,簽名經過必定的方式傳遞給CDN服務器做爲斷定依據,CDN邊緣節點依據約定的算法判斷來訪的URL是否有訪問權限。算法

若是經過,執行下一步;服務器

若是不經過,響應 HTTP 狀態碼 403。加密

若是同時配置了Referer方式防盜鏈,UserAgent防盜鏈,時間戳防盜鏈,那麼若是有其中一項沒有經過,那麼即響應403。spa

簽名參數code

  • T :URL過時的時間,把Unix以秒爲單位的時間戳,用16進制的小寫字母形式表示。
  • key : 和CDN約定好的加密字符串
  • path:訪問資源外鏈的PATH部分,好比若是訪問的外鏈是http://if-pbl.qiniudn.com/golang.png?v=1那麼其中PATH部分就是/golang.png

 

簽名算法blog

  1. 待簽名的原始字符串 s=key+path+Ttoken

  2. 簽名方式 sign=md5(s).to_lower() ,其中to_lower()表示生成的md5字符串用小寫字母表示md5

簽名參數傳遞方式

例如原始訪問外鏈是:http://if-pbl.qiniudn.com/golang.png?v=1
最終造成的訪問外鏈是:http://if-pbl.qiniudn.com/golang.png?v=1&sign=xxxx&t=xxxx

其中xxxx對應各自的值。

 

核心代碼實現: (其中path能夠根據本身的實際狀況取出來)

<?php
$path="";
$time = time()+3600;
$T=dechex($time);
$key="xxxx";  
$S=$key.$path.$T;
$token = md5($S);
$sign =strtolower($token);
echo $T;echo $sign;
相關文章
相關標籤/搜索