時間戳防盜鏈 |
操作說明登錄,進(jìn)入控制臺->CDN->域名管理->配置->訪問控制 時間戳防盜鏈修改配置 時間戳防盜鏈:默認(rèn)為關(guān)閉,開啟時,會同時生成兩組可用的key,用戶需先按照文檔說明在代碼中將Key配置進(jìn)您的URL,再進(jìn)行格式檢查,然后確認(rèn)開啟;還可以自定義輸入KEY,支持輸入備用KEY且不能與主KEY相同;同時需要輸入檢查URL,以保證鑒權(quán)服務(wù)正??捎?,以免影響服務(wù)。 算法說明基于時間戳的防盜鏈?zhǔn)峭ㄟ^對時間有關(guān)的字符串進(jìn)行簽名,將時間、簽名通過一定的方式傳遞給 CDN 服務(wù)器作為判定依據(jù),CDN 邊緣節(jié)點(diǎn)根據(jù)約定的算法判斷來訪URL是否有訪問權(quán)限。 通過,執(zhí)行下一步;不通過,響應(yīng) HTTP status code 403。 若同時配置了 Referer、UA防盜鏈、時間戳防盜鏈,有一項不滿足條件,即為不通過,響應(yīng) 403 。 簽名參數(shù)
簽名算法
注:本文所提到的 url_encode 算法。 簽名參數(shù)傳遞方式作為URL查詢參數(shù)。 例如原始訪問的URL為: 最終形成的訪問URL為:
訪問url訪問 url 的 path 部分也需要 url_encode,其算法與簽名時使用 url_encode 算法一致。斜線 / 不編碼。 訪問 url 為: scheme+"://"+host+url_encode(path)+query_part 如
注:
示例例1:URL http://xxx.yyy.com/DIR1/dir2/vodfile.mp4?v=1.1&sign=19eb212771e87cc3d478b9f32d6c7bf9&t=55bb9b80 之后將 url 地址填寫在上圖中的 檢查url 處驗(yàn)證。 例2:URL http://xxx.yyy.com/DIR1/%E4%B8%AD%E6%96%87/vodfile.mp4?v=1.2&sign=6356bca0d2aecf7211003e468861f5ea&t=55bb9b80 之后將 url 地址填寫在上圖中的 檢查url 處驗(yàn)證。 服務(wù)端驗(yàn)證服務(wù)端拿到原始的 url ,直接解析出 host, path, sign, t ,再簽名。 算法: 注意此處沒有 url_encode 操作。 原始的 url 指未經(jīng) url_decoded 的內(nèi)容。 以 nginx 為例說明: 瀏覽器發(fā)出實(shí)際請求url: nginx變量 $uri: nginx變量 $request_uri: 原始的 url 內(nèi)容和 $request_uri 內(nèi)容一致。 要求驗(yàn)證簽名時使用 $request_uri ,此值為原始值,內(nèi)容是正確的經(jīng)過 url encode 的內(nèi)容,所以 path 不用編碼。 服務(wù)端不能使用 $uri 獲取各參數(shù),然后再調(diào)用 url_encode 來獲取待簽名的 path。path url_encode 后再 url_decode,獲得的內(nèi)容與原 path 可能不一樣。
以上三個url都是合法的訪問同一資源的鏈接。相同 key 、T,執(zhí)行簽名后會有三個不同的值。 %2b url_decode 再 url_encode 可能得到 %2B,導(dǎo)致簽名不一致。 |