107
人物
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
來實現的,所以也簡稱為Refer
或refer
,詳細說明請參見 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.com
,https://*.aliyun.com
帶規定的Referer的請求、不帶Referer的請求可以訪問
- 空Refer:允許refer為空
- Refer列表:
https://*.oss-cn-beijing.aliyuncs.com
,https://*.aliyun.com
常見錯誤及排除
當Referer配置錯誤時,HTTP狀態碼(http code)是403,OSS返回如下錯誤:
<Code>AccessDenied</Code>
<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.com
或https://?.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
上一篇:
PostObject錯誤及排查___常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
下一篇:
STS常見問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
公共術語__Open API_消息隊列 MQ-阿裏雲
錄製索引管理__使用手冊_視頻直播-阿裏雲
編譯__用戶手冊_持續交付平台-阿裏雲
DeleteVServerGroup__VServerGroup相關API_API 參考_負載均衡-阿裏雲
配置自動快照隨磁盤釋放__快照_用戶指南_雲服務器 ECS-阿裏雲
轉換函數__函數_SQL語法參考_雲數據庫 OceanBase-阿裏雲
不使用主賬號__權限管理_最佳實踐_對象存儲 OSS-阿裏雲
應用連接池選擇__最佳實踐_分布式關係型數據庫 DRDS-阿裏雲
優勢__產品簡介_雲服務器 ECS-阿裏雲
2.1 數據恢複至7天內任意時間點__2. RDS最佳實踐_數據庫RDS 體驗_體驗館-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲