HTTP請求頭中origin與referer對比


0x01 前言

最近在進行CSRF測試的時候遇到了數據包的請求頭里有origin與referer,實際測試的時候,我發現只刪除referer依然可以正常發起請求,但是刪除origin之后就會提示沒有權限進行該操作了。於是,我想了解一下這兩者的區別。

0x02 referer

兩者都表示“來源”。

0x001 referer的形式

referrer:http://www.exampleA.com/index?code=adfafafadt 

通常referer會攜帶url的很多參數信息,這些隱私信息被暴露到外部網站,有可能會產生安全問題。

並且referer存在於所有請求中。

0x002 referer的請求過程

1.在發起請求前,調用window.location獲取winodw.location.href獲取當前地址欄中的請求地址。

2.將獲取到的地址附加到rerferer域中。

0x003 referer的作用

1.防止盜鏈。

盜鏈:盜鏈是指服務提供商自己不提供服務的內容,通過技術手段繞過其它有利益的最終用戶界面(如廣告),直接在自己的網站上向最終用戶提供其它服務提供商的服務內容,騙取最終用戶的瀏覽和點擊率。受益者不提供資源或提供很少的資源,而真正的服務提供商卻得不到任何的收益。【來自百度百科】

2.防止惡意請求。

比如避免CSRF攻擊:只允許外部網站訪問我的靜態資源,不允許訪問動態資源。

但是客戶端的請求不可靠,很容易被偽造。

0x03 origin

0x001 origin的形式

與referer相似,但origin僅包含

<協議,HOST,PORT>

校驗當且僅當三元組的內元素都相等時,才能證明兩個域屬於同一個域。

相比於referer,origin中不包含參數信息,會更加安全。

並且origin只存在於post請求或CORS請求時。

0x002 origin的由來

origin是由HTML5中跨域操作引入的。

跨域操作過程

1.當請求跨域操作時,瀏覽器向目標服務器發起了連接請求,並攜帶origin。

2.當服務器返回時,瀏覽器檢查response中是否包含Access-Control-Allow-Origin字段。

3.如果缺少該字段,瀏覽器將丟棄(abort)該連接事件。

4.如果存在該字段,瀏覽器將檢查當前請求所在的域是否在該字段允許的域里面。

5.如果是,則繼續連接;如果不是,則丟棄該事件。

 

 

  


免責聲明!

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



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