概述瀏覽器
CSRF是Cross Site Request Forgery的縮寫,中文是跨站點請求僞造;接下來將和你們分享這種攻擊的原理、實施的方法、以及防護的幾種方案;服務器
CSRF攻擊的原理cookie
經過在惡意網站部署好攻擊代碼和相關數據,而後引導目標網站的已經受權的用戶進入惡意網站,因爲瀏覽器已經得到了目標網站的用戶受權票據,所以惡意網站就能夠執行「事先」部署好的代碼向目標網站提交數據使目標網站執行一些寫的操做,好比刪除目標網站的數據、向目標網站提交垃圾數據等,然而這個過程是在後臺默默執行的,用戶絕不知情。session
舉個例子說明一下吧:ide
假設www.t.com是目標網站,有一個頁面www.t.com/blog/delete.aspx?id=123 是刪除ID爲123的博文操做;網站
那麼攻擊者就能夠在惡意網站www.a.com/csrfpage.aspx頁面部署下面的代碼:spa
<form id="csrffrm" action="http://www.t.com/blog/delete.aspx" target="hideiframe"><input name="id" type="hidden" value="123" /></form>設計
<iframe name="hideiframe" style='display:none'></iframe>orm
<script>csrf
document.getElementById("csrffrm").submit();
</script>
而後狡猾的攻擊者就能夠經過各類方式吸引已經成功登錄www.t.com的用戶點擊進入www.a.com/csrfpage.aspx頁面,最後惡意代碼被執行,用戶的博文ID爲123的文章在不知不覺中被攻擊者刪除了
CSRF攻擊的條件
根據上面的原理能夠看出要實施CSRF攻擊須要知足下面幾個條件:
1、須要瞭解目標系統的目錄和相關參數名稱,其實要知足這個條件並不困難,攻擊者經過相關的「系統目錄彩虹表」進行檢測又或者攻擊者自己也是目標系統的用戶之一,那麼瞭解目標系統就更容易了;
2、須要一個執行惡意代碼的網站,這個網站有多是攻擊者事先部署好的網站,或者惡意網站存在XSS漏洞恰好被攻擊者利用;
3、須要目標系統的用戶登陸而且得到了合法的操做權限,同時用戶被誘惑進入了惡意的網站;
要實施CSRF攻擊要知足這三個條件,因爲這些條件並非那麼容易被知足,因此比較容易被開發者所忽略。
CSRF攻擊的防護策略
1.使用驗證碼
記得以前的12306網站上每次查票都要輸入噁心的驗證碼,之因此要設計這個驗證碼它的目的是爲了防止機器刷票,固然也能有效的預防CSRF攻擊,可是若是每一個操做都要用戶輸入驗證碼用戶可能會崩潰掉,用戶體驗效果很是的很差;
2.檢查Referer(來源)
除了驗證碼還能夠檢查Referer是否來自於同一個源,若是Referer是同源的那麼這個操做是可信的,這個方法一般用於防止圖片盜鏈,可是有些時候Referer並非那麼的可靠,服務器並非可以百分之百的得到,好比若是用戶啓用了瀏覽器的隱私策略那麼瀏覽器就有可能阻止發送Referer,服務器就有可能沒法獲取到這個值,因此這個方式不符合科學嚴謹的原則;
3.使用token(隨機令牌)
服務器生成一個隨機令牌,並保存起來,能夠保存在服務端的session集合裏邊,或者保存在客戶端的cookie、或者頁面視圖狀態中都是能夠的,因爲瀏覽器的同源策略,惡意網站沒法讀取到目標網站的cookie和頁面視圖狀態,而後把隨機令牌隨表單一塊兒提交併在服務端驗證隨機令牌的有效性;