標籤:

CSRF攻擊淺析

簡介

Cross-site request forgery(跨站請求偽造)

wikipedia:

是一種挾制用戶在當前已登錄的Web應用程序上執行非本意的操作的攻擊方法

過程

  1. 用戶登陸一個網站a,本地生成cookie
  2. 在未退出a的情況下,訪問b網站。

CSRF攻擊流程

HTTP Cookie:

當伺服器收到HTTP請求時,可以在響應頭中增加一個Set-Cookie頭部。瀏覽器收到響應後通常會保存Cookie,之後對該伺服器每一次請求中都通過Cookie請求頭部將Cookie信息發送給伺服器。

作用:

會話狀態管理(如用戶登錄狀態、購物車、遊戲分數和其它需要記錄的信息)

個性化設置(如用戶自定義設置、主題等)

瀏覽器行為跟蹤(如跟蹤分析用戶行為會話狀態)

例子

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

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

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

防範

  1. 檢查Referer欄位

    HTTP頭中有一個Referer欄位,用以標明請求來源於哪個地址。在處理敏感數據請求時,通常來說,Referer欄位應和請求的地址位於同一域名下。以上文銀行操作為例,Referer欄位地址通常應該是轉賬按鈕所在的網頁地址,應該也位於www.examplebank.com之下。而如果是CSRF攻擊傳來的請求,Referer欄位會是包含惡意網址的地址,不會位於www.examplebank.com之下,這時候伺服器就能識別出惡意的訪問。

  2. 在請求地址中添加 token 並驗證.
    1. 服務端在收到路由請求時,生成一個隨機數,在渲染請求頁面時把隨機數埋入頁面(form表單中 <input type="hidden" name="_csrf_token" value="xxx" )
    2. 服務端設置setCookie,把該隨機數作為cookie或者session返回用戶瀏覽器
    3. 當用戶發送 GET 或者 POST 請求時帶上參數
    4. 後台在接受到請求後解析請求的cookie獲取參數的值,然後和用戶請求提交的_csrf_token做個比較,如果相等表示請求合法。

推薦閱讀:

前端開發—讓演算法"動"起來
值得前端開發者在2017學習的東西【譯】
已安裝sass和sass build,sublime編譯sass報錯?
想做前端的響應式布局應該從什麼知識入門呢?

TAG:前端入门 |