原理解析
CSRF作爲 top10的漏洞,對web應用存在巨大的危害性,攻擊者通過跨站僞造請求盜用正常用戶的身份執行具有危害性的操作,而這些行爲對服務器來說是完全合法的行爲(在沒有風控系統的情況下)。例如攻擊手法中所述
利用方式
正常用戶通過在線銀行進行轉賬匯款等操作時服務器需要驗證用戶身份,當身份驗證通過時,服務器執行用戶的操作。當前web應用中驗證用戶身份主要通過cookie,session等手段。當用戶登錄銀行的web應用後,瀏覽器將記錄用戶和銀行的session以及cookie等身份認證信息,此時用戶再訪問攻擊者的網站時,就可能出現CSRF攻擊,比如攻擊者的網站存在如下代碼<img src=”http://www.銀行.com/mony?user=轉賬操作數據”>
,用戶訪問時就會向銀行發送src中的請求,而此時用戶和銀行的會話並沒有過期,就導致在用戶完全不知情的情況下錢被轉走。
防禦方式
防禦CSRF可以從以下三個方面出發:
- 驗證HTTP Referer字段 HTTP
referer可以記錄請求來源,web應用通過檢測該字段可以判斷收到的請求是否是從自己的網站發送的。當用戶在黑客網站收到csrf攻擊後,web應用驗證referer值就可以判斷csrf攻擊。但是referer的值依然存在被篡改的可能。 - 只使用JSON API
使用JavaScript發起的AJAX請求是限制跨域的,並不能通過簡單的表單來發送json,因此可以很大程度上地域CSRF。 - 添加token驗證
通過向HTTP請求中添加一個隨機產生的token,並在服務器進行驗證可以抵禦CSRF攻擊,因爲黑客並不能僞造token,但是依然存在token被竊取的可能。 - 使用多重驗證
這種方法是當前大部分web應用商採取的方法,用戶在web端進行一些危險性較高的行爲(諸如付款,轉賬等)時,都需要同時使用手機端進行掃碼確認,通過web端和移動端的雙重確認,極大的抵禦了csrf的發生。
我的個人博客,歡迎大家訪問 ~~~