CSRF攻擊

1、CSRF攻擊

CSRF(Cross-site request forgery)跨站請求僞造,也被稱爲「One Click Attack」或者Session Riding,一般縮寫爲CSRF或者XSRF,是一種對網站的惡意利用。瀏覽器

一張圖說明CSRF:
image.png
經過這6個步驟達到攻擊的目的。安全

簡單來說就是攻擊者(黑客,釣魚網站)盜用了你的身份,以你的名義發送惡意請求,這些請求包括發送郵件、發送消息、盜取帳號、購買商品、銀行轉帳,從而使你的我的隱私泄漏和財產損失。服務器

如下條件兩者缺一不可:cookie

  • 登陸受信任的網站A,並在本地生成Cookie
  • 在不登出A的狀況下,訪問危險網站B

CSRF防護方法:

1.驗證HTTP Referer 字段

根據HTTP協議,在HTTP request頭部有一個Referer字段它記錄了該HTTP請求所在的地址,表示HTTP請求從哪一個頁面發出的。若是攻擊者要實行CSRF攻擊,那麼他只能在本身的站點構造請求,此時Referer的指就是指向黑客本身的網站。所以,若想防護CSRF攻擊,目標站點只要驗證每個請求的Referer值。網站

這種方法的好處就是簡單易行,只須要在後臺添加一個攔截器來檢查Referer便可。然而這種方法並非萬無一失的,Referer的值是由瀏覽器提供的,一些低級的瀏覽器能夠經過某種方式篡改Referer的值,這就給了攻擊者可乘之機;而一些高級瀏覽器處於安全考慮,可讓用戶設置發送HTTP請求時再也不提供Referer值,這樣當他們正常訪問支付寶網站時,由於沒有提供Referer值而被誤認爲CSRF攻擊,拒絕訪問。實際應用中一般採用第二種方法來防護CSRF攻擊。spa

2.添加token驗證

CSRF攻擊之因此可以成功,是由於攻擊者能夠徹底僞造用戶的請求,該請求中全部的用戶驗證信息都存在cookie中,所以攻擊者能夠在不知道這些驗證信息的狀況下直接利用用戶本身的cookie來經過安全驗證。要防止CSRF,關鍵在於在請求中放入黑客所不能僞造的信息,而且該信息不存在於cookie之中。能夠在HTTP請求中以參數的形式加入一個隨機產生的token,並在服務器創建一個攔截器來驗證這個token,若是請求中沒有token或者token不正確,則認爲多是CSRF攻擊而拒絕該請求。
如今業界一致的作法就是使用Anti CSRF Token來防護CSRForm

  • 用戶訪問某個表單頁面
  • 服務端生成一個Token,放在用戶的Session中,或者瀏覽器的Cookie中
  • 在頁面表單附帶上Token參數
  • 用戶提交請求後,服務端驗證表單中的Token是否與用戶Session(或Cookie)中的Token一致,一致爲合法請求,不是則非法請求。

3.驗證碼

驗證碼,強制用戶必須與應用進行交互,才能完成最終請求。一般狀況下,驗證碼可以很好的遏制CSRF攻擊。可是出於用戶體驗考慮,網站不能給全部的操做都加上驗證碼。所以驗證碼只能做爲一種輔助手段。blog

4.儘可能使用POST,限制GET

GET接口可以直接將請求地址暴露給攻擊者,因此要防止CSRF必定最好不要用GET。固然POST並非萬無一失,攻擊者只須要構造一個form表單就能夠,但須要在第三方頁面作,這樣就增長了暴露的可能性。token

5.在HTTP頭部添加自定義屬性

這種方法也是使用token並驗證可是它是把token放在HTTP請求頭部中。經過使用AJAX咱們能夠在咱們的請求頭部中添加咱們的自定義屬性,可是這種方法要求咱們將整個站的請求所有改爲AJAX,若是是新站還好,老站的話無疑是須要重寫整個站點的,這是很不可取的。接口

相關文章
相關標籤/搜索