系統漏洞瀏覽器
描述安全
CSRF(Cross-Site Request Forgery,跨站點僞造請求)是一種網絡攻擊方式,該攻擊能夠在受害者絕不知情的狀況下以受害者名義僞造請求發送給受攻擊站點,從而在未受權的狀況下執行在權限保護之下的操做,具備很大的危害性。具體來說,能夠這樣理解CSRF攻擊:攻擊者盜用了合法用戶的身份,以合法用戶的名義發送惡意請求,對服務器來講這個請求是徹底合法的,可是卻完成了攻擊者所指望的一個操做,好比以你的名義發送郵件、發消息,盜取你的帳號,添加系統管理員,甚至於購買商品、虛擬貨幣轉帳等。服務器
防護網絡
CSRF漏洞防護主要從服務端和用戶端兩個層面進行。工具
一、服務端的防護學習
目前主要防護CSRF攻擊主要有三種策略:驗證HTTP Referer字段,在請求地址中添加token並驗證,在HTTP頭中自定義屬性並驗證。網站
1)驗證HTTP Referer字段spa
根據HTTP協議,在HTTP頭中有一個字段叫Referer,它記錄了該HTTP請求的來源地址。在一般狀況下,訪問一個安全受限頁面的請求必須來自於同一個網站。csrf
好比某銀行的轉帳是經過用戶訪問http://bank.test/test?page=10&userID=101&money=10000頁面完成,用戶必須先登陸bank. test,而後經過點擊頁面上的按鈕來觸發轉帳事件。當用戶提交請求時,該轉帳請求的Referer值就會是轉帳按鈕所在頁面的URL(本例中,一般是以bank. test域名開頭的地址)。而若是攻擊者要對銀行網站實施CSRF攻擊,他只能在本身的網站構造請求,當用戶經過攻擊者的網站發送請求到銀行時,該請求的Referer是指向攻擊者的網站。所以,要防護CSRF攻擊,銀行網站只須要對於每個轉帳請求驗證其Referer值,若是是以bank. test開頭的域名,則說明該請求是來自銀行網站本身的請求,是合法的。若是Referer是其餘網站的話,就有多是CSRF攻擊,則拒絕該請求。token
2)在請求地址中添加token並驗證
CSRF攻擊之因此可以成功,是由於攻擊者能夠僞造用戶的請求,該請求中全部的用戶驗證信息都存在於Cookie中,所以攻擊者能夠在不知道這些驗證信息的狀況下直接利用用戶本身的Cookie來經過安全驗證。由此可知,抵禦CSRF攻擊的關鍵在於:在請求中放入攻擊者所不能僞造的信息,而且該信息不存在於Cookie之中。鑑於此,系統開發者能夠在HTTP請求中以參數的形式加入一個隨機產生的token,並在服務器端創建一個攔截器來驗證這個token,若是請求中沒有token或者token內容不正確,則認爲多是CSRF攻擊而拒絕該請求。
3)在HTTP頭中自定義屬性並驗證
自定義屬性的方法也是使用token並進行驗證,和前一種方法不一樣的是,這裏並非把token以參數的形式置於HTTP請求之中,而是把它放到HTTP頭中自定義的屬性裏。經過XMLHttpRequest這個類,能夠一次性給全部該類請求加上csrftoken這個HTTP頭屬性,並把token值放入其中。這樣解決了前一種方法在請求中加入token的不便,同時,經過這個類請求的地址不會被記錄到瀏覽器的地址欄,也不用擔憂token會經過Referer泄露到其餘網站。
二、用戶端的防護
對於普通用戶來講,都學習並具有網絡安全知識以防護網絡攻擊是不現實的。但若用戶養成良好的上網習慣,則可以很大程度上減小CSRF攻擊的危害。例如,用戶上網時,不要輕易點擊網絡論壇、聊天室、即時通信工具或電子郵件中出現的連接或者圖片;及時退出長時間不使用的已登陸帳戶,尤爲是系統管理員,應儘可能在登出系統的狀況下點擊未知連接和圖片。除此以外,用戶還須要在鏈接互聯網的計算機上安裝合適的安全防禦軟件,並及時更新軟件廠商發佈的特徵庫,以保持安全軟件對最新攻擊的實時跟蹤。