1. 程式人生 > >Referrer Policy 介紹

Referrer Policy 介紹

提醒:本文最後更新於 1190 天前,文中所描述的資訊可能已發生改變,請謹慎使用。

我們知道,在頁面引入圖片、JS 等資源,或者從一個頁面跳到另一個頁面,都會產生新的 HTTP 請求,瀏覽器一般都會給這些請求頭加上表示來源的 Referrer 欄位。Referrer 在分析使用者來源時很有用,有著廣泛的使用。但 URL 可能包含使用者敏感資訊,如果被第三方網站拿到很不安全(例如之前不少 Wap 站把使用者 SESSION ID 放在 URL 中傳遞,第三方拿到 URL 就可以看到別人登入後的頁面)。之前瀏覽器會按自己的預設規則來決定是否加上 Referrer。

2014 年,W3C 的 Web 應用安全工作組(Web Application Security Working Group)釋出了

Referrer Policy 草案,對瀏覽器該如何傳送 Referrer 做了詳細的規定。新版 Chrome 已經支援了這份草案,我們終於可以靈活地控制自己網站的 Referrer 策略了。

通過新的 Referrer Policy,我們可以針對第三方網站隱藏 Referrer,也可以只發送來源 URL 的 host 部分。但有一點要記住,新策略允許沉默,但不允許說謊。換句話說,你有權不告訴對方請求從哪兒來,但是不允許用假來源去騙人。不過即便是這樣,這也對現有一些 Web 應用程式的安全性造成威脅。不少 Web 應用在限制 Referrer 時允許為空,之前想要傳送無 Referrer 請求還要一點點技巧,現在就輕而易舉了。

Referrer Policy States

新的 Referrer Policy 規定了五種 Referrer 策略:No Referrer、No Referrer When Downgrade、Origin Only、Origin When Cross-origin、和 Unsafe URL。之前就存在的三種策略:never、default 和 always,在新標準裡換了個名稱。他們的對應關係如下:

策略名稱 屬性值(新) 屬性值(舊)
No Referrer no-referrer never
No Referrer When Downgrade no-referrer-when-downgrade default
Origin Only origin -
Origin When Cross-origin origin-when-crossorigin -
Unsafe URL unsafe-url always

可以看到,新標準給之前的三種策略賦予了更具意義的新名稱,同時還增加了兩種新策略。另外現階段支援 Referrer Policy 的瀏覽器保留了對舊標準的支援,但還是推薦大家儘快更新。簡單介紹下這五種型別的具體含義:

  • No Referrer:任何情況下都不傳送 Referrer 資訊;
  • No Referrer When Downgrade:僅當發生協議降級(如 HTTPS 頁面引入 HTTP 資源,從 HTTPS 頁面跳到 HTTP 等)時不傳送 Referrer 資訊。這個規則是現在大部分瀏覽器預設所採用的;
  • Origin Only:傳送只包含 host 部分的 Referrer。啟用這個規則,無論是否發生協議降級,無論是本站連結還是站外連結,都會發送 Referrer 資訊,但是隻包含協議 + host 部分(不包含具體的路徑及引數等資訊);
  • Origin When Cross-origin:僅在發生跨域訪問時傳送只包含 host 的 Referrer,同域下還是完整的。它與 Origin Only 的區別是多判斷了是否 Cross-origin。需要注意的是協議、域名和埠都一致,才會被瀏覽器認為是同域;
  • Unsafe URL:無論是否發生協議降級,無論是本站連結還是站外連結,統統都發送 Referrer 資訊。正如其名,這是最寬鬆而最不安全的策略;

Referrer Policy Delivery

知道了有哪些策略可以用,還需要了解怎麼用。這裡介紹指定 Referrer Policy 的三種方式:

CSP 響應頭

CSP(Content Security Policy),是一個跟頁面內容安全有關的規範。在 HTTP 中通過響應頭中的 Content-Security-Policy 欄位來告訴瀏覽器當前頁面要使用何種 CSP 策略。我之前寫過一篇 Content Security Policy 介紹,可以先看看。現在 CSP 還可以通過 referrer 指令和五種可選的指令值,來指定 Referrer 策略,格式非常簡單:

Content-Security-Policy: referrer no-referrer|no-referrer-when-downgrade|origin|origin-when-cross-origin|unsafe-url;

注:根據文件,通過 CSP 頭部設定 Origin When Cross-origin 策略時,指令值應該用 origin-when-cross-origin,這跟前面的表格裡的 origin-when-crossorigin 有差異。實際上經過我的測試,Chrome 42 只支援 origin-when-crossorigin,後續會不會變還不知道,建議大家使用時,自己先測一下。

CSP 的指令和指令值之間以空格分割,多個指令之間用英文分號分割。

<meta> 標籤

通過 <meta> 標籤也可以指定 Referrer 策略,同樣很簡單:

<meta name="referrer" content="no-referrer|no-referrer-when-downgrade|origin|origin-when-crossorigin|unsafe-url">

需要注意的是,<meta> 只能放在 <head>...</head> 之間,如果出現的位置不對會被忽略。同樣,如果沒有給它定義 content 屬性,或者 content 屬性為空,也會被忽略。如果 content 屬性不是合法的取值,瀏覽器會自動選擇 no-referrer 這種最嚴格的策略。

<a> 標籤的 referrer 屬性

通過給 <a> 標籤增加 referrer 屬性也可以指定 Referrer 策略,格式如下:

<a href="http://example.com" referrer="no-referrer|origin|unsafe-url">xxx</a>

這種方式作用的只是這一個連結。並且,<a> 標籤可用的 Referrer 策略只有三種:不傳、只傳 host 和都傳。另外,這樣針對單個連結設定的策略優先順序比 CSP 和 <meta> 要高。

需要注意的是:經過我的測試,目前並沒有哪個瀏覽器實現了對 referrer 屬性的支援。現階段,如果要針對單個連結去掉 Referrer,還是推薦使用下面這種支援度更好的寫法(詳情):

<a href="http://example.com" rel="noreferrer">xxx</a>

另外再重複一遍,現階段的瀏覽器還保留了對 never、default 和 always 的支援,但是已經不推薦使用了。

可以看到,通過新的 Referrer 策略,網站所有者可以選擇更高的安全級別來保證使用者隱私不被洩露;也可以選擇更低的安全級別來獲得一些便利,相比之前只能由瀏覽器預設策略一刀切,確實靈活了不少。

更新說明

本文寫完後,Origin When Cross-origin 策略的指令值有所變化,詳情請點選檢視

--EOF--

提醒:本文最後更新於 1190 天前,文中所描述的資訊可能已發生改變,請謹慎使用。

相關推薦

Referrer Policy 介紹「續」

提醒:本文最後更新於 1339 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 通過 CSP 頭部設定「Origin When Cross-origin」策略時,指令值應該用 origin-when-cross-origin,這跟 <meta> 用的 origin-when-cr

Referrer Policy 介紹

提醒:本文最後更新於 1190 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 我們知道,在頁面引入圖片、JS 等資源,或者從一個頁面跳到另一個頁面,都會產生新的 HTTP 請求,瀏覽器一般都會給這些請求頭加上表示來源的 Referrer 欄位。Referrer 在分析使用者來源時很有用,有

Content Security Policy 介紹

提醒:本文最後更新於 688 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 本文要介紹的是 W3C 的 Content Security Policy,簡稱 CSP。顧名思義,這個規範與內容安全有關,主要是用來定義頁面可以載入哪些資源,減少 XSS 的發生。 Chrome 擴充套件已經

Content Security Policy Level 2 介紹

提醒:本文最後更新於 815 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 兩年前,我寫過一篇介紹 Content Security Policy(CSP)的文章(詳情),CSP 是一個用來定義頁面可以載入或執行哪些資源的協議,目前已經發展到了 Level 2(協議地址)。我在本站之前的文

Content Security Policy (CSP) 介紹

當我不經意間在 Twitter 頁面 view source 後,發現了驚喜。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title

Reinforcement Learning policy evaluation實現以及OpenAI Gym介紹

RL Policy Evaluation Python實現 根據UCL課程Lecture 3的4x4 grid求policy evaluation的方法,可以寫成如下實現: states = [i for i in range(16)] val

(最短路徑算法整理)dijkstra、floyd、bellman-ford、spfa算法模板的整理與介紹

void empty borde fast 默認 grand else 理解 scan 這一篇博客以一些OJ上的題目為載體。整理一下最短路徑算法。會陸續的更新。。。 一、多源最短路算法——floyd算法 floyd算法主要用於求隨意兩點間的最短路徑。也成

Oozie介紹

tom image nat 驅動 scrip cloud track pat 源代碼 1. Hadoop常見調度框架: (1)Linux Crontab:Linux自帶的任務調度計劃,在任務比較少的情況下,可以使用這種方式,直接執行腳本,例如添加一個執行計劃: 0 12 *

<java>枚舉的簡單介紹

pic spi str spa 枚舉類 lee string line 舉例 1.枚舉,enum關鍵字,相當於public final static. 2.舉例: 首先定義了一個名為spiciness的枚舉類型。 public enum Spiciness {

C#中流寫入類StreamWriter的介紹

() virtual || 寫入 lock object 字符 html 更改 C#中流寫入類StreamWriter的介紹 (轉) 應用FileStream類需要許多額外的數據類型轉換工作,十分影響效率。使用StreamWriter類將提供更簡單,更方便的操作方式。

RabbitMQ基礎概念詳細介紹

可用性 將不 tar connect 相互 abi 封裝 編寫 綁定 原文地址:http://www.diggerplus.org/archives/3110 引言 你是否遇到過兩個(多個)系統間需要通過定時任務來同步某些數據?你是否在為異構系統的不同進程間相互調用、通

sock基礎編程介紹

緩沖區 可能 客戶 緩沖 當前 unix系統 ip地址 soc main 一個簡單的python socket編程 一、套接字套接字是為特定網絡協議(例如TCP/IP,ICMP/IP,UDP/IP等)套件對上的網絡應用程序提供者提供當前可移植標準的對象。它們允許程序接受並進

Cocos2d-x開發實例介紹幀動畫使用

rect http splay end ram nal cache wtl 布爾 以下我們通過一個實例介紹一下幀動畫的使用。這個實比例如以下圖所看到的,點擊Gobutton開始播放動畫,這時候播放button標題變為Stop,點擊Stopbutton能夠停止播放動畫。以下

JMM介紹

技術分享 sso jmm fonts avi content fill center font JMM介紹

轉://Oracle補丁及opatch工具介紹

獨立 管理所 無效對象 rim 計劃 目錄 conn 技術 有時 一. CPU(Critical Patch Update) 一個CPU內包含了對多個安全漏洞的修復,並且也包括相應必需的非安全漏洞的補丁。CPU是累積型的,只要安裝最新發布的CPU即可,其中包括之前

JEESZ分布式架構平臺介紹

space 視圖框架 ras oid ask 代碼生成 myeclips 角色權限 www 1. 項目核心代碼結構截圖 <!-- jeesz 工具jar --> <module>jeesz-utils</module>

Unity引擎的Player Settings介紹

hit 密碼 sdk color 電子市場 existing loaded title esc 我用的是unity5.4.3版本的 一、窗口打開: 從菜單欄查看播放器設置,選擇 Edit->Project Settings->Player 二、全局設置 第一部分

介紹下京東的(選項卡中的選項卡)是怎麽實現的

pad b- cti pre set red 二維數組 node int 我們都誰知道選項卡是通過數組實現的,那麽選項卡中的選項卡無非就是一個二維數組。 道理邏輯很簡單,下面是我實現的一個方法: 1 <!DOCTYPE html> 2 <html

dede_archives文章主表詳細介紹

small 選項 key 標題 varchar col cms cores ann dedecms二次開發目錄點這個:dedecms二次開發教程目錄 字段 類型 整理 屬性 Null 默認 額外 id mediumin

JSON的簡單介紹以及C語言的JSON庫使用

編程 delet 逗號 緩沖區 tdi 以及 and 項目 占用 JSON概述   JSON: JavaScript 對象表示法( JavaScript Object Notation) 。是一種輕量級的數據交換格式。 它基於ECMAScript的一個子集。 JSON采