狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

referrer防盜鏈

freeflydom
2024年4月23日 16:25 本文熱度 1158

使用referer

Referer是HTTP請(qǐng)求頭的一個(gè)字段,包含了當(dāng)前請(qǐng)求頁(yè)面的來(lái)源頁(yè)面的地址,通過(guò)該字段,我們可以檢測(cè)訪客是從哪里來(lái)的。

那么,referer到底有啥作用呢?

交互優(yōu)化

在某些web應(yīng)用的交互中,右上角會(huì)提供一個(gè)返回按鈕,方便用戶返回上一頁(yè)




其實(shí)現(xiàn)一般也比較簡(jiǎn)單

<a href="javascript: history.back();"></a>

這種處理方式隱藏的一個(gè)問(wèn)題是:如果用戶從其他入口如分享鏈接等地方直接進(jìn)來(lái)時(shí),點(diǎn)擊這個(gè)按鈕是無(wú)法返回。

因此在點(diǎn)擊按鈕時(shí),我們可以判斷document.referrer是否存在來(lái)優(yōu)化交互:如果存在,則返回上一頁(yè);如果不存在,則直接返回首頁(yè)。

應(yīng)該注意到上面寫(xiě)的是referer,而在DOM中,使用的是referrer,這是因此請(qǐng)求頭中的referer是由于歷史原因?qū)е碌钠磳?xiě)錯(cuò)誤,而在DOM規(guī)范中進(jìn)行了修正,因此導(dǎo)致當(dāng)前拼法并不統(tǒng)一的問(wèn)題~

防盜鏈

當(dāng)用戶訪問(wèn)網(wǎng)頁(yè)時(shí),referer就是前一個(gè)網(wǎng)頁(yè)的URL;如果是圖片的話,通常指的就是圖片所在的網(wǎng)頁(yè)。當(dāng)瀏覽器向服務(wù)器發(fā)送請(qǐng)求時(shí),referer就自動(dòng)攜帶在HTTP請(qǐng)求頭了。

一個(gè)HTML頁(yè)面往往包含多種資源,這些資源通過(guò)標(biāo)簽如scriptimglink等形式嵌套在HTML文檔中,一個(gè)完整頁(yè)面往往需要經(jīng)過(guò)發(fā)送多條HTTP請(qǐng)求下載資源,然后才能正常展示。由于HTML本身并沒(méi)有對(duì)嵌套資源的來(lái)源做限制,基于這樣的機(jī)制,盜鏈就成為了一種手段。

下面是關(guān)于盜鏈的百度百科定義

盜鏈?zhǔn)侵阜?wù)提供商自己不提供服務(wù)的內(nèi)容,通過(guò)技術(shù)手段繞過(guò)其它有利益的最終用戶界面(如廣告),直接在自己的網(wǎng)站上向最終用戶提供其它服務(wù)提供商的服務(wù)內(nèi)容,騙取最終用戶的瀏覽和點(diǎn)擊率。受益者不提供資源或提供很少的資源,而真正的服務(wù)提供商卻得不到任何的收益。

打個(gè)比方:A網(wǎng)站將自己的靜態(tài)資源如圖片或視頻等存放在服務(wù)器上。B網(wǎng)站在未經(jīng)A允許的情況下,使用A網(wǎng)站的圖片或視頻資源,放置到自己的網(wǎng)站中。由于服務(wù)器資源是需要花錢的,這樣網(wǎng)站B盜取了網(wǎng)站A的空間和流量,而A沒(méi)有獲取任何利益卻承擔(dān)了資源使用費(fèi)。B盜用A資源放到自己網(wǎng)站的行為即為盜鏈。

防盜鏈一般由下面幾種方式

  • 定期修改文件名稱或路徑

  • 通過(guò)referer,限制資源引用頁(yè)的來(lái)源

  • 通過(guò)cookie、session等進(jìn)行身份認(rèn)證

  • 圖片加水印等

這里我們主要關(guān)注一下referer的防盜鏈的原理。下面是nginx的防盜鏈配置

 location ~* \.(gif|jpg|png)$ {

    valid_referers none blocked *.phptest.com;

    if ($invalid_referer) {

        return 403;

    }

}

這種方法是在server或者location段中加入:valid_referers。這個(gè)指令在referer頭的基礎(chǔ)上為 $invalid_referer 變量賦值,其值為0或1。如果valid_referers列表中沒(méi)有Referer頭的值, $invalid_referer將被設(shè)置為1。

該指令支持noneblocked

  • 其中none表示空的來(lái)路,也就是直接訪問(wèn),比如直接在瀏覽器打開(kāi)一個(gè)文件,

  • blocked表示被防火墻標(biāo)記過(guò)的來(lái)路,*..com表示所有子域名。

通過(guò)referer,我們可以判斷請(qǐng)求的來(lái)源,從而決定服務(wù)器是否正常返回請(qǐng)求資源,達(dá)到控制請(qǐng)求的目的。

需要注意的是,在某些情況下,即使用戶是正常訪問(wèn)網(wǎng)頁(yè)或圖片,也是不會(huì)攜帶referer的,比如直接在瀏覽器地址欄直接輸入資源URL,或通過(guò)瀏覽器新窗口打開(kāi)頁(yè)面等。這種訪問(wèn)是正常的,如果強(qiáng)制現(xiàn)在某些白名單referer名單才能訪問(wèn)資源,則可能誤傷這一部分正常用戶,這也是為什么有的防盜鏈檢測(cè)中允許Referer頭部為空通過(guò)檢測(cè)的情況。

既然如此,如果把referer隱藏掉,也可以繞開(kāi)部分站點(diǎn)防盜鏈的限制,下面讓我們來(lái)看看如何實(shí)現(xiàn)隱藏referer的功能。

隱藏referer

參考

在利用部分站點(diǎn)防盜鏈限制允許referer為空,或者我們僅僅是不想讓服務(wù)器知道訪問(wèn)來(lái)源時(shí),我們可以隱藏referer。

referrerPolicy

之前瀏覽器在請(qǐng)求資源時(shí),會(huì)按自己的默認(rèn)規(guī)則來(lái)決定是否加上Referrer。后來(lái)W3C發(fā)布了Referrer-Policy草案,運(yùn)行開(kāi)發(fā)者靈活地控制自己網(wǎng)站的referer策略。主要包含下面策略

  • no-referrer:任何情況下都不發(fā)送 Referrer 信息;

  • no-referrer-when-downgrade (默認(rèn)值):在沒(méi)有指定任何策略的情況下瀏覽器的默認(rèn)行為

  • origin:在任何情況下,僅發(fā)送文件的源作為引用地址

  • origin-when-cross-origin: 對(duì)于同源的請(qǐng)求,會(huì)發(fā)送完整的URL作為引用地址,但是對(duì)于非同源請(qǐng)求僅發(fā)送文件的源。

  • same-origin:對(duì)于同源的請(qǐng)求會(huì)發(fā)送引用地址,但是對(duì)于非同源請(qǐng)求則不發(fā)送引用地址信息。

上面只列舉了一部分可選策略,詳情可參考MDN文檔

因此,我們可以手動(dòng)指定no-referrer來(lái)隱藏referer

<!-- phptest2.com是我本地的一個(gè)測(cè)試域名, 下同 -->

<img src="http://phptest2.com/upload/1.png" width="200" referrerPolicy="no-referrer" alt="">

或者在創(chuàng)建image對(duì)象的時(shí)候,指定referrerPolicy策略

const img = new Image()

img.referrerPolicy = 'no-referrer'

此時(shí)打開(kāi)開(kāi)發(fā)者工具就可以看見(jiàn)該圖片的請(qǐng)求已經(jīng)不再攜帶對(duì)應(yīng)的referer了。總結(jié)一下,一般有下面幾種設(shè)置Referer策略的方式:

  • 通過(guò) http 響應(yīng)頭中的 Referrer-Policy 字段

  • 通過(guò) meta 標(biāo)簽,name 為 referrer

  • 通過(guò)a、area、img、iframe、link元素的 referrerpolicy 屬性。

  • 通過(guò)a、area、link元素的 rel=noreferrer 屬性。

需要注意的是目前referrerPolicy仍處于提案的草稿階段,瀏覽器兼容性并不是特別好。


作者:橙紅年代
鏈接:https://juejin.cn/post/6844903892170309640
來(lái)源:稀土掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。



該文章在 2024/4/23 16:25:22 編輯過(guò)
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved