HTTP請求中的referrer和Referrer-Policy

本文將介紹一個涉及安全和隱私的http請求頭中的字段— referrer,以及如何經過 Referrer Policy去修改 referrer的值或者是顯示與否。

什麼是referrer

當一個用戶點擊當前頁面中的一個連接,而後跳轉到目標頁面時,目標頁面會收到一個信息,即用戶是從哪一個源連接跳轉過來的。以下圖所示:瀏覽器


也就是說,當你發起一個http請求,請求頭中的 referrer字段就說明了你是從哪一個頁面發起該請求的。

使用場景

有時候咱們須要控制這個 referrer字段的值,便是否讓其顯示在請求頭中,或者是否顯示完整路徑等。尤爲是在如下兩個使用場景:

隱私

在社交網站的我的中心頁面,也許會存在一些外鏈,這時候社交網站確定不但願用戶在點擊這些連接跳轉到其餘第三方網站時會將本身我的中心的URL信息顯示在 referrer字段中傳過去,尤爲是我的中心頁面的URL每每會帶着用戶數據和一些敏感信息。這時候能夠選擇不顯示來源頁面URL信息或者只顯示一個網站根地址hostname。

安全

有些使用了https的網站,可能在URL中使用一個參數(sid)來做爲用戶身份憑證,而又須要引入其餘https網站的資源,這種狀況,網站確定不但願泄露用戶的身份憑證信息。當https網站須要引入不安全的http網站的資源或者有連接要跳轉到http網站時,這時候將https源網站的URL信息傳過去也是不太安全的。

固然還有其餘狀況下須要referrer的值,好比最近公司所作的項目中,有一個請求因爲請求頭過大致使響應是400,咱們的Referrer Policy是默認的狀況,顯示的referrer是完整的URL信息,該URL帶了不少敏感數據好比加密後的token,sessionID等,長度特別長,請求頭中的cookie和請求的URL也帶着很大塊的信息,最終咱們決定讓referrer只攜帶網站根地址的信息而不是其完整路徑,由此減少了header的大小。
安全

Referrer-Policy

Referrer-Policy的做用就是爲了控制請求頭中 referrer的內容,目前是一個候選標準,不過已經有部分瀏覽器支持該標準。
目前 Referrer-Policy只包含如下幾種值:
enum ReferrerPolicy {
"",
"no-referrer",
"no-referrer-when-downgrade",
"same-origin",
"origin",
"strict-origin",
"origin-when-cross-origin",
"strict-origin-when-cross-origin",
"unsafe-url"
};複製代碼

空字符串

若設爲空串則默認按照瀏覽器的機制設置 referrer的內容,默認狀況下是和 no-referrer-when-downgrade設置得同樣。

no-referrer

不顯示 referrer的任何信息在請求頭中。

no-referrer-when-downgrade

這是默認值。當從https網站跳轉到http網站或者請求其資源時(安全降級HTTPS→HTTP),不顯示 referrer的信息,其餘狀況(安全同級HTTPS→HTTPS,或者HTTP→HTTP)則在 referrer中顯示完整的源網站的URL信息。

same-origin

表示瀏覽器只會顯示 referrer信息給同源網站,而且是完整的URL信息。所謂同源網站,是協議、域名、端口都相同的網站。

origin

表示瀏覽器在 referrer字段中只顯示源網站的源地址(即協議、域名、端口),而不包括完整的路徑。

strict-origin

該策略更爲安全些,和 origin策略類似,只是不容許 referrer信息顯示在從https網站到http網站的請求中(安全降級)。

origin-when-cross-origin

當發請求給同源網站時,瀏覽器會在 referrer中顯示完整的URL信息,發個非同源網站時,則只顯示源地址(協議、域名、端口)

strict-origin-when-cross-origin

origin-when-cross-origin類似,只是不容許 referrer信息顯示在從https網站到http網站的請求中(安全降級)。

unsaft-url

瀏覽器老是會將完整的URL信息顯示在 referrer字段中,不管請求發給任何網站。

Referrer-Policy更改方法

能夠有如下5種方法:

1. 經過Referrer-Policy HTTP header設置:
bash

Referrer-Policy: origin複製代碼

2. 經過<meta>元素改變Referrer Policy,直接修更名爲referrer的內容cookie

<meta name="referrer" content="origin">複製代碼

3.<a>, <area>, <img>, <iframe>, 或者<link>元素設置referrerpolicy屬性session

<a href="http://example.com" referrerpolicy="origin">複製代碼

4. 如需設置不顯示referrer信息時,也能夠給 <a>, <area>, <link>元素設置rel的連接關係。網站

<a href="http://example.com" rel="noreferrer">複製代碼

總結

使用何種 Referrer Policy取決於網站的需求,可是通常來講, unsafe-url是不太建議用的,一樣,若是是隻想顯示網站的根地址,那麼建議用 strict-origin和s trict-origin-when-cross-origin。若是URL中沒有什麼敏感信息,那就默認使用 no-referrer-when-downgrade


相關文章
相關標籤/搜索