為什麼CSRF Token寫在COOKIE裡面

2021-10-05 21:05:40 字數 1072 閱讀 2623

最近做滲透測試的時候經常看到使用者的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的一種形式。

為什麼C 不叫 C?

今天看了c primer,介紹前自增操作符和後自增操作的差別。順便了解了為什麼c 不叫 c?c 的c說明了它本質上是從c語言演化過來的,c 語言是c語言的超集,是在c語言基礎上進行的擴充套件 引入了new delete等c語言中沒有的操作符,增加了物件導向程式設計的支援,等等 是先有c語言,在進行c...

C 為什麼不叫 C

c primer 確實給我帶來了很多驚喜。作為一本專業的具有較高門檻的 入門書 它有很多地方實在是國內的書不可及的,這不僅在於內容上的嚴謹,更表現在優秀的習題所帶給學習者的啟迪。習題5.16 你認為為什麼c 不叫做 c?看到這個習題,頓感眼前一亮 不禁想起某些國內書籍的題目,真是平淡如水 這對於理解...

為什麼C 不叫 C

這是乙個叫人眼前一亮的題目,在讓人熟悉自增操作前置和後置兩種形式時,也可以了解下c 的命名來歷。自增 操作符有前置和後置兩種形式,其區別如下 i 返回的是左值,是i 加1 後 i 這個物件本身 i 返回的是右值,i 這個物件會加1 但返回的是i 未修改前的數值。兩種不同的返回值是由於其本質操作不同導...