CSRF攻擊原理及防護


 

一、CSRF是什么
  CSRF全稱為跨站請求偽造(Cross-site request forgery),是一種網絡攻擊方式,也被稱為 one-click attack 或者 session riding。

二、CSRF攻擊原理
  CSRF攻擊利用網站對於用戶網頁瀏覽器的信任,挾持用戶當前已登陸的Web應用程序,去執行並非用戶本意的操作。

三、CSRF攻擊實例
角色:
  正常瀏覽網頁的用戶:User
  正規的但是具有漏洞的網站:WebA
  利用CSRF進行攻擊的網站:WebB

步驟一
用戶登錄、瀏覽並信任正規網站WebA,同時,WebA通過用戶的驗證並在用戶的瀏覽器中產生Cookie。
在這里插入圖片描述

步驟二
攻擊者WebB通過在WebA中添加圖片鏈接等方式誘導用戶User訪問網站WebB。
在這里插入圖片描述

步驟三
在用戶User被誘導訪問WebB后,WebB會利用用戶User的瀏覽器訪問第三方網站WebA,並發出操作請求。
在這里插入圖片描述

步驟四
用戶User的瀏覽器根據WebB的要求,帶着步驟一中產生的Cookie訪問WebA。
在這里插入圖片描述

步驟五
網站WebA接收到用戶瀏覽器的請求,WebA無法分辨請求由何處發出,由於瀏覽器訪問時帶上用戶的Cookie,因此WebA會響應瀏覽器的請求,如此一來,攻擊網站WebB就達到了模擬用戶操作的目的。
在這里插入圖片描述

四、CSRF攻擊防護
上文簡單的敘述了CSRF攻擊的原理,接下來將要介紹幾種CSRF攻擊的防護方法。

1. 只使用JSON API

使用JavaScript發起AJAX請求是限制跨域的,並不能通過簡單的 表單來發送JSON,所以,通過只接收JSON可以很大可能避免CSRF攻擊。

2. 驗證HTTP Referer字段

根據 HTTP 協議,在 HTTP 頭中有一個字段叫 Referer,它記錄了該 HTTP 請求的來源地址。在通常情況下,訪問一個安全受限頁面的請求來自於同一個網站,比如上文中用戶User想要在網站WebA中進行轉賬操作,那么用戶User

必須先登錄WabA
然后再通過點擊頁面上的按鈕出發轉賬事件

這時該轉帳請求的 Referer 值就會是轉賬按鈕所在的頁面的URL,而如果黑客要對銀行網站實施 CSRF攻擊,他只能在他自己的網站構造請求,當用戶User通過黑客的網站發送請求到WebA時,該請求的 Referer 是指向黑客自己的網站。
因此,要防御 CSRF 攻擊,網站WebA只需要對於每一個轉賬請求驗證其 Referer 值,如果是以網站WebA的網址開頭的域名,則說明該請求是來自WebA自己的請求,是合法的。如果 Referer 是其他網站的話,則有可能是黑客的 CSRF 攻擊,拒絕該請求。

3. 在請求地址中添加takon驗證

CSRF 攻擊之所以能夠成功,是因為黑客可以完全偽造用戶的請求,該請求中所有的用戶驗證信息都是存在於 cookie 中,因此黑客可以在不知道這些驗證信息的情況下直接利用用戶自己的 cookie 來通過安全驗證。要抵御 CSRF,關鍵在於在請求中放入黑客所不能偽造的信息,並且該信息不存在於 cookie 之中。可以在 HTTP 請求中以參數的形式加入一個隨機產生的 token,並在服務器端建立一個攔截器來驗證這個 token,如果請求中沒有 token 或者 token 內容不正確,則認為可能是 CSRF 攻擊而拒絕該請求。
這種方法要比檢查 Referer 要安全一些,token 可以在用戶登陸后產生並放於 session 之中,然后在每次請求時把 token 從 session 中拿出,與請求中的 token 進行比對。

 


免責聲明!

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



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