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是怎么比對的。