Nginx

防止 Nginx 上的盜鏈

  • December 2, 2017

我正在嘗試保護我的圖像免遭盜鏈。我的第一種方法是:

location ~* \.(png|jpg)$ {
   valid_referers none blocked server_names;
   if ($invalid_referer) {
       return 403;
   }
}

這裡的問題是none標籤,因為如果你直接輸入一個url就沒有referer。因此,如果使用者直接輸入網址,每個網站仍然可以顯示我的圖片。所以我刪除了none標籤,令人驚訝的是它仍在我的網站上執行。

如果我直接輸入我的網址,它仍然可以工作。但為什麼?

現在我的推薦人是空的,但我仍然可以看到我的圖像。由於server_names標籤,它確實有效,但據我所知,server_names意味著如果有人在引用者中有我的伺服器名稱,他們可以顯示我的圖像。但是如果我直接輸入我的網址,我就沒有推薦人。

誰可以給我解釋一下這個?

這在以下文件中得到了很好的解釋valid_referers

  • none

請求標頭中缺少該Referer欄位;

  • blocked

Referer欄位存在於請求標頭中,但其值已被防火牆或代理伺服器刪除;這些值是不以http://or開頭的字元串https://

  • server_names

請求頭Referer欄位包含伺服器名稱之一;

它的行為就像它應該的那樣:none允許沒有任何引用者的請求並且server_names引用者與您的伺服器名稱匹配。

此設置用於防止盜鏈,即將您的圖像嵌入其他站點。如果您知道 URL,則不應阻止查看圖像,例如,如果您在頁面源上查找它。

此外,您必須首先考慮網站的可用性。畢竟,您只是想向在其頁面上使用您的圖像的人發表聲明,而不是向實際查看它們的人發表聲明。某些瀏覽器或防火牆可能會刪除引薦來源網址,即使在您自己的網站上不允許使用none.

如果您想非常嚴格,我不建議您這樣做,那麼您根本就不會依賴推薦人。相反,您可以在頁面上設置限時 cookie,並在嘗試訪問圖像時檢查該 cookie 的存在。

引用自:https://serverfault.com/questions/886252