@[toc]
1、前言摘要
在csdn網(wǎng)站隨便抓個鏈接來看看:
Referer參數(shù):
referrer policy是unsafe url的捺氢,ok镊讼,下面介紹一下Referer和referrer policy
2凝化、Referer簡介
referer參數(shù)是http請求頭header里的一個關(guān)鍵參數(shù)扔枫,表示的意思是鏈接的來源地址俊鱼,比如在頁面引入圖片刻像、JS 等資源,或者跳轉(zhuǎn)鏈接并闲,一般不修改策略细睡,都會帶上Referer
3、Referer安全性
Referer這個http header的參數(shù)應(yīng)用得當(dāng)?shù)脑挼刍穑强梢蕴岣甙踩缘牧镝悖热纾梢赃@個參數(shù)其實(shí)就告訴了鏈接的請求來源于哪個網(wǎng)站犀填,所以可以根據(jù)這個特性蠢壹,限制一些接口只能本網(wǎng)站的才能調(diào),外部網(wǎng)站不能調(diào)
案例:
比如你曾經(jīng)在瀏覽器訪問過銀行A的網(wǎng)站九巡,所以瀏覽器是有保存Cookie的知残,Cookie并沒有過期,這時比庄,你不小心登錄一個惡意的論壇網(wǎng)站還是什么網(wǎng)站求妹,你訪問了鏈接(其實(shí)鏈接后面加的是竊取Cookie,調(diào)銀行A網(wǎng)站轉(zhuǎn)賬API)佳窑,這時候制恍,如果網(wǎng)站安全性驗(yàn)證不過的話,就會竊取金錢的惡意操作
針對這個銀行轉(zhuǎn)賬竊取案例神凑,我們或許可以這樣改造净神,我們可以再增加一個驗(yàn)證的工程,不給直接調(diào)用轉(zhuǎn)賬接口溉委,我們在這個驗(yàn)證工程里加入Referer識別的鹃唯。這時候,CSRF攻擊的話瓣喊,肯定得在非銀行A官網(wǎng)的服務(wù)器發(fā)送請求坡慌,我們改造之后,這個請求會先發(fā)送到驗(yàn)證工程這里藻三,這時候解析請求洪橘,獲取Referer屬性進(jìn)行識別,發(fā)現(xiàn)不是銀行A官網(wǎng)的地址棵帽,這時候直接攔截熄求,拒絕訪問。
這個案例是合理應(yīng)用Referer的逗概,當(dāng)然Referer是記錄來源地址弟晚,很顯然,這個Referer的url里很可能也會帶上一些敏感信息,比如token或者用戶的信息等卿城,這些一旦被其它網(wǎng)站竊取了淑履,是很危險(xiǎn)的,如果對于Referer參數(shù)要合理地使用藻雪,所以有必要介紹一下w3c提出的referrer policy
ps:http header里的referer其實(shí)是拼寫少了一個r秘噪,正確的拼寫應(yīng)該是referrer ,不過當(dāng)初http標(biāo)準(zhǔn)發(fā)出來時候勉耀,并沒有發(fā)現(xiàn)拼寫錯了指煎,所以現(xiàn)在一直保持著拼寫錯誤
4、相關(guān)術(shù)語
同源策略:同源策略指協(xié)議+域名+端口都相同的情況便斥,是由Netscape提出的一個著名的安全策略至壤,現(xiàn)在所有支持JavaScript 的瀏覽器都會使用這個策略。實(shí)際上枢纠,這種策略只是一個規(guī)范像街,并不是強(qiáng)制要求,各大廠商的瀏覽器只是針對同源策略的一種實(shí)現(xiàn)
跨域請求:跨域請求就是不符合同源策略的情況晋渺,也就是協(xié)議镰绎、域名、端口有一個或多個不一樣木西,都算是跨域的請求畴栖,所以https鏈接和http鏈接的相互調(diào)用也是屬于跨域的請求
5、Referrer Policy
Referrer Policy是W3C官方提出的一個候選策略八千,主要用來規(guī)范Referrer
官網(wǎng):https://www.w3.org/TR/referrer-policy/
最初是只有5種策略的吗讶,現(xiàn)在規(guī)范增加到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
不發(fā)送referrer信息
5.2恋捆、no-referrer-when-downgrade
協(xié)議降級時候不發(fā)送Referrer信息照皆,其實(shí)https的網(wǎng)站鏈接調(diào)到http的網(wǎng)站鏈接
5.3、same-origin
同源鏈接(協(xié)議沸停、域名膜毁、端口都相同)發(fā)送,否則不發(fā)送
5.4星立、origin
Referrer發(fā)送的信息只包括協(xié)議+域名+端口爽茴,不包括其它信息
5.5葬凳、strict-origin
https的網(wǎng)站協(xié)議降級訪問http的網(wǎng)站绰垂,這種情況就是一種不嚴(yán)格的情況,這種情況不發(fā)送Referrer火焰,其它情況發(fā)送Referrer(協(xié)議+域名+端口)劲装,注意這里的Referrer同樣只包括協(xié)議+域名+端口而已
5.6、origin-when-cross-origin
跨域時候發(fā)送Referrer(協(xié)議+域名+端口),其它情況也就是同源的情況發(fā)送完整的Referrer信息
5.7占业、strict-origin-when-cross-origin
這里有兩個條件绒怨,1、嚴(yán)格模式谦疾,也就是不會出現(xiàn)https的網(wǎng)站協(xié)議降級調(diào)http的鏈接南蹂;2、跨域念恍,符合這兩種情況的六剥,發(fā)送Referrer(協(xié)議+域名+端口),其它情況包括https的網(wǎng)站調(diào)http的鏈接這種協(xié)議降級的情況峰伙,等等疗疟,還有很多情況,這些情況都發(fā)送完整的Referrer
5.8瞳氓、unsafe-url
這種情況是不管是否協(xié)議降級訪問策彤,還是同源跨域訪問,全都發(fā)送Referrer匣摘,當(dāng)然這里的Referrer也是完整的Referrer店诗,有什么就發(fā)什么,所以這種是一種不安全的協(xié)議
5.9音榜、空字符串
空字符串“”對應(yīng)于無引用者策略必搞,導(dǎo)致回退到其他位置定義的引用者策略,或者在沒有此類更高級別策略的情況下囊咏,默認(rèn)為“ no-referrer-when-downgrade”恕洲。此默認(rèn)設(shè)置發(fā)生在官網(wǎng)§8.3確定請求的Referrer算法中。
6梅割、Referrer使用方法
單個標(biāo)簽設(shè)置:<a>霜第、<area>、<img>户辞、<iframe>泌类、<link>
,這些標(biāo)簽都可以設(shè)置referrerpolicy屬性
<a referrerpolicy="origin" target="_blank">鏈接</a>
全局策略設(shè)置:加個meta標(biāo)簽底燎,content="策略"
<meta name="referrer" content="origin">