CSRF攻擊是什麼前端
CSRF
是跨站請求僞造的縮寫,也被稱爲XSRF
, 是一種挾制用戶在當前已登陸的Web應用程序上執行非本意的操做的攻擊方法。
跟跨網站腳本(XSS)相比,XSS利用的是用戶對指定網站的信任,CSRF利用的是網站對用戶網頁瀏覽器的信任。
由於CSRF攻擊利用的是衝着瀏覽器分不清發起請求是否是真正的用戶本人。,也就是說,簡單的身份驗證只能保證請求發自某個用戶的瀏覽器,卻不能保證請求自己是用戶自願發出的。ajax
CSRF攻擊基本原理後端
cookie
。<img>
標籤:<img src="http://www.examplebank.com/account=Alice&amount=1000&payfor=Badman" >
cookie
,這樣瀏覽器發出的這個請求就能獲得響應執行。危險網站能夠僞造一個表單並隱藏,並在本身網站的onload
事件中,觸發這個表單的提交事件,就能夠改GET攻擊爲POST攻擊瀏覽器
CSRF攻擊的對象與防範思路安全
咱們要防範它,先要知道它的目標,而後設法保護這些目標。
咱們要明白,僅僅靠發起CSRF攻擊的話,黑客只能藉助受害者的cookie
騙取服務器的信任,可是黑客並不能憑藉拿到cookie
,也看不到 cookie
的內容。另外,對於服務器返回的結果,因爲瀏覽器同源策略的限制,黑客也沒法進行解析。
這就告訴咱們,咱們要保護的對象是那些能夠直接產生數據改變的服務,而對於讀取數據的服務,則不須要進行CSRF
的保護。
而保護的關鍵,是在請求中放入黑客所不能僞造的信息。服務器
防範手段cookie
這個方法的確能夠防範一些CSRF
攻擊,可是對於進階攻擊就無能爲力了——POST
請求同樣能夠僞造。
因此這個方法不夠安全。只能提升攻擊的門檻。網絡
方法:添加驗證碼來識別是否是用戶主動去發起這個請求,因爲必定強度的驗證碼機器沒法識別,所以危險網站不能僞造一個完整的請求。
優勢:簡單粗暴,低成本,可靠,能防範99.99%的攻擊者。
缺點:對用戶不友好。session
方法:在HTTP
請求頭中有一個字段叫Referer
,它記錄了請求的來源地址。 服務器須要作的是驗證這個來源地址是否合法,若是是來自一些不受信任的網站,則拒絕響應。
優勢:零成本,簡單易實現。
缺點:因爲這個方法嚴重依賴瀏覽器自身,所以安全性全看瀏覽器。框架
Referer
的具體實現可能有差異。Referer
能夠被篡改。Referer
值會記錄下用戶的訪問來源,有些用戶認爲這樣會侵犯到他們本身的隱私權。所以有些用戶可能會開啓瀏覽器防止跟蹤功能,不提供Referer
,從而致使正經常使用戶請求被拒絕。方法:使用token
來代替驗證碼驗證。因爲黑客並不能拿到和看到cookie
裏的內容,因此沒法僞造一個完整的請求。基本思路以下:
token
(好比把cookie
hash化生成),存在session
中,放在cookie
中或者以ajax
的形式交給前端。cookie
中的token
,放到請求url
裏或者請求頭中。token
,因爲黑客沒法獲得或者僞造token
,因此能防範csrf
更進一步的增強手段(不須要session):
token
,而後以token
爲密鑰散列生成一段密文token
和密文都隨cookie
交給前端token
都交給後端token
和密文進行正向散列驗證,看token
能不能生成一樣的密文token
也沒法拿到密文。優勢:
缺點:
hash
計算,增長性能上的成本cookie
臃腫:更加依賴網絡的狀況token
,這樣黑客能夠在本身的網站上獲得這個 token
,並立刻就能夠發動CSRF攻擊。(進一步增強法能夠防範,或者驗證連接是不是鏈到本身本站的,是就在後面添加 token
,若是是通向外網則不加)cookie
和token
,固然這不在本文的討論範圍以內。token
附在請求中。(能夠經過框架和庫解決)方法:這種方法也是使用token並進行驗證,和上一種方法不一樣的是把它放到HTTP頭中自定義的屬性裏。
優勢:
缺點:
由於CSRF攻擊利用的是衝着瀏覽器分不清發起請求是否是真正的用戶本人,因此防範的關鍵在於在請求中放入黑客所不能僞造的信息。從而防止黑客僞造一個完整的請求欺騙服務器。
原文連接:https://www.imooc.com/article/13552