CSRF攻擊淺析
簡介
Cross-site request forgery(跨站請求偽造)
wikipedia:
是一種挾制用戶在當前已登錄的Web應用程序上執行非本意的操作的攻擊方法
過程
- 用戶登陸一個網站a,本地生成cookie
- 在未退出a的情況下,訪問b網站。
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&amp;amount=1000&amp;for=Badman">
如果有賬戶名為Alice的用戶訪問了惡意站點,而她之前剛訪問過銀行不久,登錄信息尚未過期,那麼她就會損失1000資金。
防範
- 檢查Referer欄位
HTTP頭中有一個Referer欄位,用以標明請求來源於哪個地址。在處理敏感數據請求時,通常來說,Referer欄位應和請求的地址位於同一域名下。以上文銀行操作為例,Referer欄位地址通常應該是轉賬按鈕所在的網頁地址,應該也位於www.examplebank.com之下。而如果是CSRF攻擊傳來的請求,Referer欄位會是包含惡意網址的地址,不會位於www.examplebank.com之下,這時候伺服器就能識別出惡意的訪問。
- 在請求地址中添加 token 並驗證.
- 服務端在收到路由請求時,生成一個隨機數,在渲染請求頁面時把隨機數埋入頁面(form表單中 <input type="hidden" name="_csrf_token" value="xxx" )
- 服務端設置setCookie,把該隨機數作為cookie或者session返回用戶瀏覽器
- 當用戶發送 GET 或者 POST 請求時帶上參數
- 後台在接受到請求後解析請求的cookie獲取參數的值,然後和用戶請求提交的_csrf_token做個比較,如果相等表示請求合法。
推薦閱讀:
※前端開發—讓演算法"動"起來
※值得前端開發者在2017學習的東西【譯】
※已安裝sass和sass build,sublime編譯sass報錯?
※想做前端的響應式布局應該從什麼知識入門呢?
TAG:前端入门 |