訪問圖片資源403問題

經(jīng)過

網(wǎng)站建設(shè)過程中,請(qǐng)求其他網(wǎng)站的圖片,通過img的src加載時(shí),報(bào)403。但是這個(gè)圖片地址直接復(fù)制出來在地址欄打開是可以看到的。

16C25717-3336-4CC0-A9B3-941259C9C553.png

解決方法: 在HTML代碼的head中添加

<meta name="referrer" content="no-referrer" />

原因

http請(qǐng)求中的referrer

  • http請(qǐng)求體的header中有一個(gè)referrer字段,用來表示發(fā)起http請(qǐng)求的源地址信息,這個(gè)referrer信息是可以省略但是不可修改的,就是說你只能設(shè)置是否帶上這個(gè)referrer信息,不能定制referrer里面的值。
  • 服務(wù)器端在拿到這個(gè)referrer值后就可以進(jìn)行相關(guān)的處理,比如圖片資源,可以通過referrer值判斷請(qǐng)求是否來自本站,若不是則返回403或者重定向返回其他信息,從而實(shí)現(xiàn)圖片的防盜鏈。上面出現(xiàn)403就是因?yàn)?,?qǐng)求的是別人服務(wù)器上的資源,但把自己的referrer信息帶過去了,被對(duì)方服務(wù)器攔截返回了403。
  • 在前端可以通過meta來設(shè)置referrer policy(來源策略),具體可以設(shè)置哪些值以及對(duì)應(yīng)的結(jié)果參考這里。所以針對(duì)上面的403情況的解決方法,就是把referrer設(shè)置成no-referrer,這樣發(fā)送請(qǐng)求不會(huì)帶上referrer信息,對(duì)方服務(wù)器也就無法攔截了。
  • 瀏覽器中referrer默認(rèn)的值是no-referrer-when-downgrade,就是除了降級(jí)請(qǐng)求的情況以外都會(huì)帶上referrer信息。降級(jí)請(qǐng)求是指https協(xié)議的地址去請(qǐng)求http協(xié)議,所以上面403的情況還有另一種解決方法就是,請(qǐng)求的圖片地址換成http協(xié)議,自己的地址使用http協(xié)議,這樣降級(jí)請(qǐng)求也不會(huì)帶上referrer。

nginx配置圖片防盜鏈

  • 最后再說一下這種根據(jù)referrer攔截,在服務(wù)器如何配置。我自己服務(wù)器用的nginx,這里就說下nginx的配置。首先打開nginx的配置文件:conf/nginx.conf,在server下面添加如下:
    location ~* \.(gif|jpg|png|jpeg)$ {
       valid_referers none  valid.url.com;
       if ($invalid_referer) {
            return 403;
       }
    }
  • 首先第一句以文件格式后綴匹配出圖片資源路徑,然后通過valid_referers添加合法的referer地址,加上none,表示沒有傳referer也是合法的,最后referer不合法的情況返回403。如果想跳其他地址或返回其他圖片資源可以這樣:rewrite xxx.xxx.com/xxx.jpg。

orgin

  • http頭部中還有一個(gè)與referrer類似的叫orgin的字段,在發(fā)送跨域請(qǐng)求或預(yù)檢請(qǐng)求(preflight request)時(shí)會(huì)帶上這個(gè)參數(shù),他用來表示發(fā)起請(qǐng)求的服務(wù)器地址,這個(gè)參數(shù)是必定會(huì)傳的,然后服務(wù)器端用此字段來判斷是否允許跨域。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 之前碰到一個(gè)問題,就是html中通過img標(biāo)簽引入一個(gè)圖片地址,報(bào)403。但是這個(gè)圖片地址直接復(fù)制出來在地址...
    ITgecko閱讀 27,991評(píng)論 5 24
  • http://www.91ri.org/tag/fuzz-bug 通常情況下,有三種方法被廣泛用來防御CSRF攻擊...
    jdyzm閱讀 4,391評(píng)論 0 5
  • 深入淺出HTTP協(xié)議(WEB開發(fā)和面試必備) 1.基礎(chǔ)概念篇 a.簡(jiǎn)介 HTTP是Hyper Text Trans...
    半世韶華憶闌珊閱讀 1,341評(píng)論 0 7
  • 那年鄂軸隱芳名, 無奈下崗夢(mèng)未成。 四面八方尋解語, 只怪愚人不傾城。 淚襟再多無由意, 雙湖糧機(jī)總關(guān)情。 學(xué)得技...
    黃曉紅閱讀 156評(píng)論 0 2
  • 文/三枚 轉(zhuǎn)眼,2016年就快收尾了,這一年過的不好不壞,經(jīng)歷了新鮮事物,感嘆下命運(yùn)的神奇,把悟出來的東西熬成一碗...
    三枚閱讀 230評(píng)論 1 3

友情鏈接更多精彩內(nèi)容