什麼是CSRF?爲什麼CSRF Token寫在COOKIE裏面?

自制工具   翰華Box:https://hanhuabox.lanzous.com/b00zjq9uf

翰華Box - 開發日誌:https://blog.csdn.net/qq_41517936/article/details/106409456

    跨站請求僞造(英語:Cross-site request forgery),也被稱爲 one-click attack 或者 session riding,通常縮寫爲 CSRF 或者 XSRF, 是一種挾制用戶在當前已登錄的Web應用程序上執行非本意的操作的攻擊方法。跟跨網站腳本(XSS)相比,XSS 利用的是用戶對指定網站的信任,CSRF 利用的是網站對用戶網頁瀏覽器的信任。

攻擊細節

跨站請求攻擊,簡單地說,是攻擊者通過一些技術手段欺騙用戶的瀏覽器去訪問一個自己曾經認證過的網站並運行一些操作(如發郵件,發消息,甚至財產操作如轉賬和購買商品)。由於瀏覽器曾經認證過,所以被訪問的網站會認爲是真正的用戶操作而去運行。這利用了web中用戶身份驗證的一個漏洞:簡單的身份驗證只能保證請求發自某個用戶的瀏覽器,卻不能保證請求本身是用戶自願發出的

例子

假如一家銀行用以運行轉賬操作的URL地址如下:http://www.examplebank.com/withdrawaccount=AccoutName&amount=1000&for=PayeeName

那麼,一個惡意攻擊者可以在另一個網站上放置如下代碼: <img src="http://www.examplebank.com/withdrawaccount=Alice&amount=1000&for=Badman">

如果有賬戶名爲Alice的用戶訪問了惡意站點,而她之前剛訪問過銀行不久,登錄信息尚未過期,那麼她就會損失1000資金。

這種惡意的網址可以有很多種形式,藏身於網頁中的許多地方。此外,攻擊者也不需要控制放置惡意網址的網站。例如他可以將這種地址藏在論壇,博客等任何用戶生成內容的網站中。這意味着如果服務端沒有合適的防禦措施的話,用戶即使訪問熟悉的可信網站也有受攻擊的危險

透過例子能夠看出,攻擊者並不能通過CSRF攻擊來直接獲取用戶的賬戶控制權,也不能直接竊取用戶的任何信息。他們能做到的,是欺騙用戶瀏覽器,讓其以用戶的名義運行操作

爲什麼CSRF Token寫在COOKIE裏面

 

下面這裏就是引用的了:https://blog.csdn.net/sdb5858874/article/details/81666194

最近做滲透測試的時候經常看到用戶的COOKIE信息裏帶有CSRF等字樣的信息,問了一下同事,他們說這個是用來防禦CSRF的字段。

這一下可把我弄懵了,因爲我對CSRF的理解是:攻擊者盜用用戶的COOKIE執行非用戶本意的操作。

我的想法是,用戶的COOKIE就像是一張門禁卡一樣,攻擊者可以盜用用戶的門禁卡,以被盜用戶的身份來執行一些設計增刪改的操作,既然用戶已經盜用了用戶的COOKIE刷卡進門了,這個COOKIE對攻擊者的防禦也應該也就失效了纔對。

但是遵循存在即合理的原則,我還是好好了解了一下爲什麼CSRF-Token可以寫道COOKIE裏。

將csrf令牌寫入Cookie,是因爲:
服務器進行csrf防禦校驗的時候,是拿用戶http請求體中的token參數值和cookie中的csrftoken值進行比對。
如果值一樣了,操作才被允許執行。

因爲同源策略的限制,當正常用戶通過賬號密碼等方式登陸網站A後,在不註銷賬號或當前COOKIE失效之前,再次訪問網站A時(協議、IP、端口號相同則屬於同源)瀏覽器會自動在HTTP請求包中帶上該網站用戶登陸後的COOKIE信息。

也就是說我們對CSRF的理解應爲:攻擊者借用用戶COOKIE執行非用戶本意的操作。

在此攻擊過程中用戶COOKIE對於攻擊者來說是不可見的是未知的、不可見的,攻擊者能做到僅僅是借用COOKIE,而COOKIE裏面具體寫了什麼,攻擊者是不知道的。又因爲COOKIE裏的信息對於攻擊者來說是不可預知的,無法僞造的,所以將CSRF-TOKEN寫在COOKIE中符合就CSRF防禦思想中的不可預知原則。

將CSRF-TOKEN寫在COOKIE中可抵禦CSRF攻擊,但前提是網站不存在XSS漏洞或者CSRF-Token具備httponly屬性。

 

正常來說,比較容易理解的是,正確的CSRFtoken被放在了服務器的Session文件中。

當用戶執行增刪改操作的時候,服務器會從用戶對應的Session文件中取出這個Token值和用戶提交到服務器的Token值做對比

如果兩者數值相同,用戶的增刪改操作纔是被允許執行的,否則用戶的請求就是不合法的,即CSRF。

 

所以用戶COOKIE中存在CSRF-Token信息,其實是服務器保存正確CSRF-Token的一種形式。

它與將CSRF-Token存儲在Session中是一樣的,僅僅是Token的一種儲存形式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章