天天看點

CSRF的原理和防範措施

a)攻擊原理:

i.使用者C通路正常網站A時進行登入,浏覽器儲存A的cookie
ii.使用者C再通路攻擊網站B,網站B上有某個隐藏的連結或者圖檔标簽會自動請求網站A的URL位址,例如表單送出,傳指定的參數
iii.而攻擊網站B在通路網站A的時候,浏覽器會自動帶上網站A的cookie
iv.是以網站A在接收到請求之後可判斷目前使用者是登入狀态,是以根據使用者的權限做具體的操作邏輯,造成僞造成功

b)防範措施:

i.在指定表單或者請求頭的裡面添加一個随機值做為參數
ii.在響應的cookie裡面也設定該随機值
iii.那麼使用者C在正常送出表單的時候會預設帶上表單中的随機值,浏覽器會自動帶上cookie裡面的随機值,那麼伺服器下次接受到請求之後就可以取出兩個值進行校驗
iv.而對于網站B來說網站B在送出表單的時候不知道該随機值是什麼,是以就形成不了攻擊

我的了解:搞清楚三個點 

1、什麼是csrf?(cross-site request forgery)簡稱跨站請求僞造,首先要搞明白它是一種行為,什麼行為?
僞造你的請求的行為。

簡單來說就是: 你通路了信任網站A,然後A會用儲存你的個人資訊并傳回給你的浏覽器一個cookie,然後呢,在cookie的過期時間之内,你去通路了惡意網站B,它給你傳回一些惡意
請求代碼,要求你去通路網站A,而你的浏覽器在收到這個惡意請求之後,在你不知情的情況下,會帶上儲存在本地浏覽器的cookie資訊去通路網站A,然後網站A誤以為是使用者本身的
操作,導緻來自惡意網站C的攻擊代碼會被執行:發郵件,發消息,修改你的密碼,購物,轉賬,偷窺你的個人資訊,導緻私人資訊洩漏和賬戶财産安全受到威脅。

2、如何解決?在post請求時,form表單或ajax裡添加csrf_token(實際項目代碼裡就是如此簡單)
解決原理:添加csrf_token值後,web架構會在響應中自動幫我們生成cookie資訊,傳回給浏覽器,同時在前端代碼會生成一個csrf_token值,然後當你post送出資訊時,web架構
會自動比對cookie裡和前端form表單或ajax送出上來的csrf_token值,兩者一緻,說明是目前浏覽器發起的正常請求并處理業務邏輯傳回響應,那麼第三方網站拿到你的cookie值
為什麼不能通過驗證呢,因為他沒你前端的那個随機生成的token值啊,他總不能跑到你電腦面前檢視你的浏覽器前端頁面自動随機生成的token值吧。
注意:你打開浏覽器通路某個url(頁面),預設是get請求,也就是說,你隻要通路了url,對應的視圖函數裡隻要不是if xx == post的邏輯就會執行,是以你打開頁面,他會先生
成cookie(token)值,傳回給浏覽器,然後你送出表單,或者發ajax請求時,會将浏覽器的cookie資訊(token值)發送給伺服器進行token比對,這個過程相對于你發起了兩次請
求,第一次是get,第二次才是post,搞清楚這個,你才能明白csrf_token是怎麼比對的。