閱讀107 返回首頁    go 人物


OSS防盜鏈(Referer)配置及錯誤排除__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲

什麼是Referer

Referer是HTTP Header的一部分,當瀏覽器向Web服務器發送請求時,一般會帶上Referer,告訴服務器從哪個頁麵鏈接過來的。Referer其實應該是單詞Referrer,不過拚錯的人太多了,編寫標準的人也就將錯就錯了。

Referer的作用

  • 防盜鏈。比如,網站訪問自己的圖片服務器,圖片服務器取到Referer來判斷是不是自己的域名,如果是就繼續訪問,不是則攔截。
  • 數據統計。比如,統計用戶是從哪裏鏈接過來訪問的。

Referer為空

空Referer指的是HTTP請求中Referer頭部的內容為空,或者HTTP請求中不包含Referer頭部。

下麵兩種情況Referer為空:

  • 當請求並不是由鏈接觸發產生。比如,直接把地址輸入地址欄裏打開頁麵。
  • 從https頁麵上的鏈接訪問到非加密的http頁麵時,在http頁麵上是檢查不到Referer的。

在防盜鏈設置中,允許空Referer和不允許空Referer有什麼區別呢?
在防盜鏈的白名單設置中,如果指名白名單中包含空的Referer,那麼通過瀏覽器地址欄直接訪問該資源URL是可以訪問到的;但如果不指名需要包含空的Referer,那麼通過瀏覽器直接訪問也是被禁止的。

OSS防盜鏈

OSS防盜鏈是通過Referer來實現的,所以也簡稱為Referrefer,詳細說明請參見 OSS防盜鏈

OSS防盜鏈配置

OSS防盜鏈包括:

  • 是否允許Referer字段為空的請求訪問
  • Referer字段白名單

OSS防盜鏈通過在 控製台SDK 設置bucket屬性來配置。

OSS防盜鏈注意點

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.txt、AEWU.EXE、AEWI.dll等。要縮小範圍可以輸入AEW.txt,查找以AEW開頭的所有文件類型並.txt為擴展名的文件如AEWIP.txt、AEWDF.txt。
  • 問號?:代替一個字符。如果輸入love?,查找以love開頭的一個字符結尾文件類型的文件,如lovey、lovei等。要縮小範圍可以輸入love?.doc,查找以love開頭的一個字符結尾文件類型並.doc為擴展名的文件如lovey.doc、loveh.doc。

典型配置

  • 所有請求都可以訪問

    • 空Refer:允許refer為空
    • Refer列表: 空
  • 帶規定的Referer的請求才能訪問

    • 空Refer:不允許refer為空
    • Refer列表:https://*.oss-cn-beijing.aliyuncs.comhttps://*.aliyun.com
  • 帶規定的Referer的請求、不帶Referer的請求可以訪問

    • 空Refer:允許refer為空
    • Refer列表:https://*.oss-cn-beijing.aliyuncs.comhttps://*.aliyun.com

常見錯誤及排除

當Referer配置錯誤時,HTTP狀態碼(http code)是403,OSS返回如下錯誤:

  1. <Code>AccessDenied</Code>
  2. <Message>You are denied by bucket referer policy.</Message>

提示:

  • Referer報錯一般是站點類應用,瀏覽器中可以查看Header的Referer。如Chrome,按 F12 打開 開發者工具 ,在 Network 中查看相應元素的Header。
  • OSS返回的錯誤可以通過抓包獲取。如Wireshark,篩選器可以指定為 host bucket-name.oss-cn-beijing.aliyuncs.com

可能的原因:

  • Referer為空,請求Header中沒有Referer字段或者Referer字段為空。
  • Referer不在規定的Referer範圍內。以下幾點請注意:
    • https://還是https://配置時請確認。
    • a.aliyun.com和b.aliyun.com,匹配於https://*.aliyun.comhttps://?.aliyun.com
    • domain.com匹配於https://domain.com,而不是https://*.domain.com
  • Referer格式錯誤,Refer配置必須帶https://或者https://,否則無效。如b.aliyun.com是無效配置。

提示:

  • 在 OSS控製台 > Bucket > Bucket屬性 > 防盜鏈 中配置Referer。
  • 調試時請清空瀏覽器緩存。
  • OSS的Refer隻支持白名單, 暫時不支持黑名單。

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

其它問題

設置防盜鏈後,為什麼用curl還是能抓到視頻?


檢查是否開啟了CDN、CDN的Refer設置不為空、CDN的防盜鏈名單與OSS一致。CDN設置防盜鏈請參考 防盜鏈。調試OSS的Referer時,請先排除CDN的影響。先調好OSS的Referer,再調CDN的Referer。

Referer更詳細的介紹及配置請參見 防盜鏈

最後更新:2016-11-23 16:04:18

  上一篇:go PostObject錯誤及排查___常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
  下一篇:go STS常見問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲