HTTP系列之Referer和Referrer policy簡介


@

1、前言摘要

在csdn網站隨便抓個鏈接來看看:

Referer參數:
在這里插入圖片描述
referrer policy是unsafe url的,ok,下面介紹一下Referer和referrer policy
在這里插入圖片描述

2、Referer簡介

referer參數是http請求頭header里的一個關鍵參數,表示的意思是鏈接的來源地址,比如在頁面引入圖片、JS 等資源,或者跳轉鏈接,一般不修改策略,都會帶上Referer

3、Referer安全性

Referer這個http header的參數應用得當的話,是可以提高安全性的,比如,可以這個參數其實就告訴了鏈接的請求來源於哪個網站,所以可以根據這個特性,限制一些接口只能本網站的才能調,外部網站不能調

案例:
比如你曾經在瀏覽器訪問過銀行A的網站,所以瀏覽器是有保存Cookie的,Cookie並沒有過期,這時,你不小心登錄一個惡意的論壇網站還是什么網站,你訪問了鏈接(其實鏈接后面加的是竊取Cookie,調銀行A網站轉賬API),這時候,如果網站安全性驗證不過的話,就會竊取金錢的惡意操作
針對這個銀行轉賬竊取案例,我們或許可以這樣改造,我們可以再增加一個驗證的工程,不給直接調用轉賬接口,我們在這個驗證工程里加入Referer識別的。這時候,CSRF攻擊的話,肯定得在非銀行A官網的服務器發送請求,我們改造之后,這個請求會先發送到驗證工程這里,這時候解析請求,獲取Referer屬性進行識別,發現不是銀行A官網的地址,這時候直接攔截,拒絕訪問。

這個案例是合理應用Referer的,當然Referer是記錄來源地址,很顯然,這個Referer的url里很可能也會帶上一些敏感信息,比如token或者用戶的信息等,這些一旦被其它網站竊取了,是很危險的,如果對於Referer參數要合理地使用,所以有必要介紹一下w3c提出的referrer policy

ps:http header里的referer其實是拼寫少了一個r,正確的拼寫應該是referrer ,不過當初http標准發出來時候,並沒有發現拼寫錯了,所以現在一直保持着拼寫錯誤

4、相關術語

  • 同源策略:同源策略指協議+域名+端口都相同的情況,是由Netscape提出的一個著名的安全策略,現在所有支持JavaScript 的瀏覽器都會使用這個策略。實際上,這種策略只是一個規范,並不是強制要求,各大廠商的瀏覽器只是針對同源策略的一種實現

  • 跨域請求:跨域請求就是不符合同源策略的情況,也就是協議、域名、端口有一個或多個不一樣,都算是跨域的請求,所以https鏈接和http鏈接的相互調用也是屬於跨域的請求

5、Referrer Policy

Referrer Policy是W3C官方提出的一個候選策略,主要用來規范Referrer

官網:https://www.w3.org/TR/referrer-policy/

最初是只有5種策略的,現在規范增加到9種

enum ReferrerPolicy {
  "",
  "no-referrer",
  "no-referrer-when-downgrade",
  "same-origin",
  "origin",
  "strict-origin",
  "origin-when-cross-origin",
  "strict-origin-when-cross-origin",
  "unsafe-url"
};
5.1、no-referrer

不發送referrer信息

5.2、no-referrer-when-downgrade

協議降級時候不發送Referrer信息,其實https的網站鏈接調到http的網站鏈接

5.3、same-origin

同源鏈接(協議、域名、端口都相同)發送,否則不發送

5.4、origin

Referrer發送的信息只包括協議+域名+端口,不包括其它信息

5.5、strict-origin

https的網站協議降級訪問http的網站,這種情況就是一種不嚴格的情況,這種情況不發送Referrer,其它情況發送Referrer(協議+域名+端口),注意這里的Referrer同樣只包括協議+域名+端口而已

5.6、origin-when-cross-origin

跨域時候發送Referrer(協議+域名+端口),其它情況也就是同源的情況發送完整的Referrer信息

5.7、strict-origin-when-cross-origin

這里有兩個條件,1、嚴格模式,也就是不會出現https的網站協議降級調http的鏈接;2、跨域,符合這兩種情況的,發送Referrer(協議+域名+端口),其它情況包括https的網站調http的鏈接這種協議降級的情況,等等,還有很多情況,這些情況都發送完整的Referrer

5.8、unsafe-url

這種情況是不管是否協議降級訪問,還是同源跨域訪問,全都發送Referrer,當然這里的Referrer也是完整的Referrer,有什么就發什么,所以這種是一種不安全的協議

5.9、空字符串

空字符串“”對應於無引用者策略,導致回退到其他位置定義的引用者策略,或者在沒有此類更高級別策略的情況下,默認為“ no-referrer-when-downgrade”。此默認設置發生在官網§8.3確定請求的Referrer算法中。

6、Referrer使用方法

單個標簽設置:<a>、<area>、<img>、<iframe>、<link>,這些標簽都可以設置referrerpolicy屬性

<a href="http://example.html" referrerpolicy="origin" target="_blank">鏈接</a>

全局策略設置:加個meta標簽,content="策略"

<meta name="referrer" content="origin">

在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM