1. 程式人生 > >我所理解的CSRF

我所理解的CSRF

一.CSRF是什麼?

  CSRF(Cross-site request forgery),中文名稱:跨站請求偽造,也被稱為:one click attack/session riding,縮寫為:CSRF/XSRF。

二.CSRF可以做什麼?

  你這可以這麼理解CSRF攻擊:攻擊者盜用了你的身份,以你的名義傳送惡意請求。CSRF能夠做的事情包括:以你名義傳送郵件,發訊息,盜取你的賬號,甚至於購買商品,虛擬貨幣轉賬......造成的問題包括:個人隱私洩露以及財產安全。

三.CSRF漏洞現狀

  CSRF這種攻擊方式在2000年已經被國外的安全人員提出,但在國內,直到06年才開始被關注,08年,國內外的多個大型社群和互動網站分別 爆出CSRF漏洞,如:NYTimes.com(紐約時報)、Metafilter(一個大型的BLOG網站),YouTube和百度HI......而 現在,網際網路上的許多站點仍對此毫無防備,以至於安全業界稱CSRF為“沉睡的巨人”。

四.CSRF的原理

  之前對這方面看過介紹,用例說明也差不多。總結來說,就是使用者user(C)在登入比如說web(A網站的時候),為了給使用者提供便利,不用重複的登入賬戶,那麼瀏覽器會把使用者的名字和密碼儲存在cookie中。這樣就保證了一直登入的狀態。假如user(C)在賬戶沒有登出的狀態下,又去瀏覽了一個不安全的網站web(B),這樣web(B)就可以借用使用者在瀏覽器cookie中的使用者名稱字和密碼進行非法的操作。就相當於把你的賬戶名字和密碼都交給了別人。

五、CSRF防禦

  對於上述的狀況,因為頁面提交是form方式,所以我們選擇在user(C)登入之後,為使用者加一個token欄位。同時網站也保留這個欄位,並把這個欄位設定為隱藏的屬性。這樣,在進行表單form提交的時候,web(A)網站會先去驗證token欄位是否一致,如果一致則會進行後續的操作。那麼現在說一下web(B)網站,在user(C)瀏覽這個不安全的web(B)網站的時候,web(B)網站會把自己的非法連結以及操作帶著user(C)的cookie去請求web(A),但是這時候的web(B)就相當於模擬了一個假的使用者user(C)。web(A)給web(B)一個token欄位,並保持隱藏欄位。但是這個web(A)儲存的隱藏token欄位和使用者user(C)在cookie的token明顯不一致。所以,也就能達到有效的CSRF防禦。這是一種session防護機制。

  另外的一種是Json Web Token認證機制(JWT).JWT由三部分組成,第一部分我們稱它為頭部(header),第二部分我們稱其為載荷(payload, 類似於飛機上承載的物品),第三部分是簽證(signature)。值得一說的是第三部分,JWT的第三部分是一個簽證資訊,這個簽證資訊由三部分組成:header (base64後的),payload (base64後的),secret。這個部分需要base64加密後的header和base64加密後的payload使用.連線組成的字串,然後通過header中宣告的加密方式進行加鹽secret組合加密,然後就構成了jwt的第三部分。作為開發者我認為,這種方式比較好一點。伺服器不需要去儲存token欄位,減輕了伺服器的壓力。安全也是可靠地。