天天看點

OSS防盜鍊(Referer)配置及錯誤排除

<code>referer</code>是http header的一部分,當浏覽器向web伺服器發送請求時,一般會帶上referer,告訴伺服器從哪個頁面連結過來的。

<code>referer</code>其實應該是單詞<code>referrer</code>,不過拼錯的人太多了,編寫标準的人也就将錯就錯了。

防盜鍊。比如,網站通路自己的圖檔伺服器,圖檔伺服器取到referer來判斷是不是自己的域名,如果是就繼續通路,不是則攔截。

資料統計。比如,統計使用者是從哪裡連結過來通路的。

空referer指的是http請求中referer頭部的内容為空,或者http請求中不包含referer頭部。

下面兩種情況referer為空:

當請求并不是由連結觸發産生。比如,直接把位址輸入位址欄裡打開頁面;

從https頁面上的連結通路到非加密的http頁面時,在http頁面上是檢查不到referer的。

在防盜鍊設定中,允許空referer和不允許空referer有什麼差別呢?

在防盜鍊的白名單設定中,如果指名白名單中包含空的referer,那麼通過浏覽器位址欄直接通路該資源url是可以通路到的;

但如果不指名需要包含空的referer,那麼通過浏覽器直接通路也是被禁止的。

oss防盜鍊包括:

是否允許referer字段為空的請求通路;

referer字段白名單。

oss防盜鍊配置中有以下注意點:

使用者隻有通過url簽名或者匿名通路object時,才會做防盜鍊驗證。請求header中有<code>authorization</code>字段時,不會做防盜鍊驗證;

一個bucket可以支援多個referer參數,這些參數之間由<code>,</code>分隔;

referer參數支援通配符<code>*</code>和<code>?</code>,詳細解釋參見下面的通配符說明;

使用者可以設定<code>是否允許referer字段為空</code>的請求通路;

白名單為空時,不會檢查referer字段是否為空(不然所有的請求都會被拒絕);

白名單不為空,且設定了不允許referer字段為空的規則;則隻有referer屬于白名單的請求被允許,其它請求(包括referer為空的請求)會被拒絕;

如果白名單不為空,但設定了允許referer字段為空的規則;則referer為空的請求和符合白名單的請求會被允許;其它請求都會被拒絕;

bucket的三種權限(private,public-read,public-read-write)都會檢查referer字段。

通配符說明:

星号<code>*</code>:代替0個或多個字元。如果正在查找以aew開頭的一個檔案,但不記得檔案名其餘部分,可以輸入aew,查找以aew開頭的所有檔案類型的檔案,如aewt.txt、aewu.exe、aewi.dll等。要縮小範圍可以輸入aew.txt,查找以aew開頭的所有檔案類型并.txt為擴充名的檔案如aewip.txt、aewdf.txt。

問号<code>?</code>:代替一個字元。如果輸入love?,查找以love開頭的一個字元結尾檔案類型的檔案,如lovey、lovei等。要縮小範圍可以輸入love?.doc,查找以love開頭的一個字元結尾檔案類型并.doc為擴充名的檔案如lovey.doc、loveh.doc。

所有請求都可以通路

空refer:允許refer為空

refer清單: 空

帶規定的referer的請求才能通路

空refer:不允許refer為空

帶規定的referer的請求、不帶referer的請求可以通路

當referer配置錯誤時,http狀态碼(http code)是403,oss傳回如下錯誤:

提示: referer報錯一般是站點類應用,浏覽器中可以檢視header的referer。如chrome,按 <code>f12</code> 打開 <code>開發者工具</code> ,在 <code>network</code> 中檢視相應元素的header; oss傳回的錯誤可以通過抓包擷取。如wireshark,篩選器可以指定為 <code>host bucket-name.oss-cn-beijing.aliyuncs.com</code> 。

可能的問題:

referer為空,請求header中沒有referer字段或者referer字段為空。

referer不在規定的referer範圍内。以下幾點請注意:

<code>http://</code>還是<code>https://</code>配置時請确認;

a.aliyun.com和b.aliyun.com,比對于<code>http://*.aliyun.com</code>或<code>http://*.aliyun.com</code>;

domain.com比對于<code>http://domain.com</code>,而不是<code>http://*.domain.com</code>;

referer格式錯誤,refer配置必須帶<code>http://</code>或者<code>https://</code>,否則無效。如b.aliyun.com是無效配置。

在 <code>對象存儲oss -&gt; bucket -&gt; bucket屬性 -&gt; 防盜鍊</code> 中配置referer; 調試時請清空浏覽器緩存; oss的refer隻支援 白名單, 暫時不支援黑名單 。

設定防盜鍊後,用curl還是能抓到視訊?

繼續閱讀