概述

本文介紹OSS防盜鏈配置及常見錯誤排查方法。

 

詳細描述

什麼是Referer

Referer是HTTP Header的一部分,當瀏覽器向Web伺服器發送請求時,一般會帶上Referer,告訴伺服器從哪個頁面連結過來的。

 

Referer的作用

  • 防盜鏈。比如,網站訪問自己的圖片伺服器,圖片伺服器取到Referer來判斷是不是自己的網域名稱,如果是就繼續訪問,不是則攔截。
  • 資料統計。比如,統計使用者是從哪裡連結過來訪問的。

 

Referer為空白

  • 空Referer指的是HTTP請求中Referer頭部的內容為空白,或者HTTP請求中不包含Referer頭部。如果有下面兩種情況則Referer為空白。
    • 當請求並不是由連結觸發產生。比如,直接把地址輸入地址欄裡開啟頁面。
    • 從https頁面上的連結訪問到非加密的http頁面時,在http頁面上是檢查不到Referer的。
  • 在防盜鏈設定中,允許空Referer和不允許空Referer的區別如下。
    • 在防盜鏈的白名單設定中,如果指明白名單中包含空的Referer,那麼通過瀏覽器地址欄直接存取該資源URL是可以訪問到的。
    • 如果不指明需要包含空的Referer,那麼通過瀏覽器直接存取也是被禁止的。

 

OSS防盜鏈

OSS防盜鏈是通過Referer來實現的,所以也簡稱為Refer或refer。

 

OSS防盜鏈配置

提示:Referer詳細的介紹及配置請參見防盜鏈

OSS防盜鏈通過在控制台或SDK設定Bucket屬性來配置。

  • OSS防盜鏈配置內容包括以下兩部分內容。
    • 是否允許Referer欄位為空白的請求訪問。
    • Referer欄位白名單。
  • OSS防盜鏈配置中需要注意以下幾點。
    • 使用者只有通過URL簽名或者匿名訪問Object時,才會做防盜鏈驗證。如果請求Header中有Authorization欄位時,不會做防盜鏈驗證。
    • 一個Bucket可以支援多個Referer參數,這些參數之間由,分隔。
    • Referer參數支援萬用字元*?,詳細解釋可參考萬用字元說明。
    • 使用者可以設定是否允許Referer欄位為空白的請求訪問。
    • 白名單為空白時,不會檢查Referer欄位是否為空白(不然所有的請求都會被拒絕)。
    • 白名單不為空白,且設定了不允許Referer欄位為空白的規則,則只有Referer屬於白名單的請求被允許,其它請求(包括Referer為空白的請求)會被拒絕。
    • 如果白名單不為空白,但設定了允許Referer欄位為空白的規則,則Referer為空白的請求和符合白名單的請求會被允許,其它請求都會被拒絕。
    • Bucket的三種許可權(private、public-read、public-read-write)都會檢查Referer欄位。
  • 萬用字元說明。
    • 星號*:代替0個或多個字元。如果正在尋找以AEW開頭的一個檔案,但不記得檔案名稱其餘部分,可以輸入AEW*,尋找以AEW開頭的所有檔案類型的檔案,如AEWT.txtAEWU.EXEAEWI.dll等。要縮小範圍可以輸入AEW*.txt,尋找以AEW開頭,並以.txt為副檔名的檔案,如AEWIP.txtAEWDF.txt
    • 問號?:代替一個字元。如果輸入love?,尋找以love開頭的一個字元結尾檔案類型的檔案,如loveylovei等。要縮小範圍可以輸入love?.doc,尋找以love開頭,任意一個字元結尾,並以.doc為副檔名的檔案,如lovey.docloveh.doc
  • 典型配置說明如下。
    • 所有請求都可以訪問。

      • 空Referer:允許Referer為空白。
      • Referer列表:空。
    • 帶有規定的Referer請求或不帶Referer的請求才能訪問。

      • 空Referer:不允許Referer為空白。
      • Referer列表:http://*.oss-cn-beijing.aliyuncs.comhttp://*.aliyun.com

 

常見錯誤及排除

錯誤一:配置防盜鏈後用curl命令還是能擷取到視頻檔案

錯誤原因

可能開啟了CDN並且沒有配置CDN中的Referer。

 

解決方案
  1. 檢查是否開啟了CDN。CDN的Referer設定不可為空,且防盜鏈名單需與OSS一致。
  2. 調試OSS的Referer時,請先排除CDN的影響。且優先調試OSS的Referer,再調試CDN的Referer。

 

錯誤二:當Referer配置錯誤時HTTP提示”403“錯誤且OSS提示“You are denied by bucket referer policy.”錯誤

錯誤原因

通常有以下兩種主要原因。

  • Referer為空白,請求Header中沒有Referer欄位或者Referer欄位為空白。
  • Referer不在規定範圍或者格式錯誤。

 

解決方案

建議您清空瀏覽器緩衝後再進行調試。如果仍然存在異常錯誤,則參考如下步驟進行解決。

  • Referer為空白時,通過在OSS控制台選擇 Bucket > Bucket屬性 > 防盜鏈 中配置Referer。需要注意OSS的Referer只支援白名單,暫時不支援黑名單。
  • Referer不在規定範圍或者格式錯誤時,需要確認是否配置http://或者https://,並更正Referer的配置範圍,比如a.aliyun.comb.aliyun.com,匹配於http://*.aliyun.comhttp://?.aliyun.comdomain.com匹配於http://domain.com,而不是http://*.domain.com
  • Referer報錯一般是網站類應用,瀏覽器中可以查看Header的Referer。如Chrome瀏覽器,按鍵盤F12開啟 開發人員工具,在 Network 中查看相應元素的Header。
  • OSS返回的錯誤可以通過抓包擷取。如抓包工具Wireshark,篩選器可以指定為host bucket-name.oss-cn-beijing.aliyuncs.com

 

相關文檔

其它錯誤的排除請參看OSS 403錯誤及排除

 

適用於

  • Object Storage Service