CSRF(Cross Site Request Forgery)攻擊原理和防禦

賈富程發表於2018-10-18

一,CSRF攻擊原理

CSRF全拼為Cross Site Request Forgery,譯為跨站請求偽造。

CSRF指攻擊者盜用了你的身份,以你的名義傳送惡意請求。

          包括:以你的名義傳送郵件,傳送訊息,盜取你的賬號,甚至於購買商品,虛擬貨幣轉賬......

造成的問題:個人隱私洩露以及財產安全。

想要深入理解CSRF的攻擊特性我們有必要了解一下網站session的工作原理。 

在使用者1和使用者2登入的時候,我們的伺服器在他們登入成功後,在session表中為他們每個使用者分配了一個sessionid並且存下了一個對應的資訊。當使用者第二次訪問該伺服器的時候,會將sessionid在request請求中攜帶者傳送過去。這時我們的伺服器就可以根據sessionid確定使用者儲存的資料,然後進行使用。

http請求是無狀態的,也就是說每次http請求都是獨立的無關之前的操作的,但是每次http請求都會將本域下的所有cookie作為http請求頭的一部分傳送給服務端,所以服務端就根據請求中的cookie存放的sessionid去session物件中找到該會員資料了。 

瞭解上面的之後CSRF攻擊是這樣的:

1. 使用者C開啟瀏覽器,訪問受信任網站A,輸入使用者名稱和密碼請求登入網站A;
2.在使用者資訊通過驗證後,網站A產生Cookie資訊並返回給瀏覽器,此時使用者登入網站A成功,可以正常
傳送請求到網站A;
3. 使用者未退出網站A之前,在同一瀏覽器中,開啟一個TAB頁訪問網站B;
4. (網站上的某個圖片吸引了你,你去點選了一下,同時就會觸發一個js點選事件)網站B接收到使用者請求後,
返回一些攻擊性程式碼,併發出一個請求要求訪問站點A;
5. 瀏覽器在接收到這些攻擊性程式碼後,根據網站B的請求,(由於你當前的瀏覽器狀態已經是登陸狀態,
所以cookie資訊都會跟正常的請求一樣,純天然的利用當前的登陸狀態)在使用者不知情的情況下,向網站
A發出請求。網站A並不知道該請求其實是由B發起的,所以會根據使用者C的Cookie資訊以C的許可權處理該請求,
導致來自網站B的惡意程式碼被執行。複製程式碼

二,防禦

  1. 在客戶端向後端請求介面資料的時候,後端會往響應中的 cookie 中設定 csrf_token 的值
  2. 在 Form 表單中新增一個隱藏的的欄位,值也是 csrf_token
  3. 在使用者點選提交的時候,會帶上這兩個值向後臺發起請求
  4. 後端接受到請求,以會以下幾件事件:
  • 從 cookie中取出 csrf_token
  • 從 表單資料中取出來隱藏的 csrf_token 的值
  • 進行對比
      1. 如果比較之後兩值一樣,那麼代表是正常的請求,如果沒取到或者比較不一樣,代表不是正常的請求,不執行下一步操作


      相關文章