@
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">