安全相關,理解Cookie以及Cookie安全

Cookie是什麼

Cookie是服務端發送到用戶瀏覽器而且保存到本地的一小塊數據,它會在瀏覽器下次向同一服務器發起請求時,被攜帶到服務器上。css

它的做用:前端

  • 常常用來作一些用戶會話狀態管理、個性化設置等等。數據庫

  • 前端能夠經過document.cookie來訪問cookie。跨域

  • cookie是跨域的,也就是在不一樣的域名中,訪問的cookie的時候,只能訪問對應的域名的cookie。瀏覽器

 

Cookie 和 CSRF 的關係是什麼

搞明白這個問題,首先要明白什麼CSRF?和它相關的Cookie特性是什麼?安全

一、CSRF是什麼?

CSRF,中文名叫跨站請求僞造,發生的場景就是,用戶登錄了a網站,而後跳轉到b網站,b網站直接發送一個a網站的請求,進行一些危險操做,就發生了CSRF攻擊!服務器

這時候,懂得這個CSRF了嗎?我認爲一部分同窗依然不懂,由於我看過太多這樣的描述了!cookie

由於有這麼一些疑惑,爲何在b網站能夠仿造a網站的請求?Cookie不是跨域的嗎?什麼條件下,什麼場景下,會發生這樣的事情?優化

這時候,咱們要注意上面我對cookie的定義,在發送一個http請求的時候,攜帶的cookie是這個http請求域的地址的cookie。也就是我在b網站,發送a網站的一個請求,攜帶的是a網站域名下的cookie!不少同窗的誤解,就是以爲cookie是跨域的,b網站發送任何一個請求,我只能攜帶b網站域名下的cookie。網站

固然,咱們在b網站下,讀取cookie的時候,只能讀取b網站域名下的cookie,這是cookie的跨域限制。因此要記住,不要把http請求攜帶的cookie,和當前域名的訪問權限的cookie混淆在一塊兒。

還要理解一個點:CSRF攻擊,僅僅是利用了http攜帶cookie的特性進行攻擊的,可是攻擊站點仍是沒法獲得被攻擊站點的cookie。

這個和XSS不一樣,XSS是直接經過拿到Cookie等信息進行攻擊的。

二、Cookie相關特性?

在CSRF攻擊中,就Cookie相關的特性:

一、http請求,會自動攜帶Cookie。

二、攜帶的cookie,仍是http請求所在域名的cookie。

三、Cookie如何應對的 CSRF攻擊?

明白了CSRF的本質,就能理解如何防護CSRF的攻擊。

方案一:放棄Cookie、使用Token!

因爲CSRF是經過Cookie僞造請求的方式,欺騙服務器,來達到本身的目的。那麼咱們採起的策略就是,不使用Cookie的方式來驗證用戶身份,咱們使用Token!

Token的策略,通常就是登錄的時候,服務端在response中,返回一個token字段,而後之後全部的通訊,前端就把這個token添加到http請求的頭部。

這是當前,最經常使用的防護CSRF攻擊的策略。

方案二:SameSite Cookies

前端在發展,Cookie也在進化,Cookie有一個新的屬性——SateSite。可以解決CSRF攻擊的問題。

它表示,只能當前域名的網站發出的http請求,攜帶這個Cookie。

固然,因爲這是新的cookie屬性,在兼容性上確定會有問題。

方案三:服務端Referer驗證

咱們發送的http請求中,header中會帶有Referer字段,這個字段表明的是當前域的域名,服務端能夠經過這個字段來判斷,是否是「真正」的用戶請求。

也就是說,若是b網站僞造a網站的請求,Referer字段仍是代表,這個請求是b網站的。也就能辨認這個請求的真僞了。

不過,目前這種方案,使用的人比較少。可能存在的問題就是,若是連Referer字段都能僞造,怎麼辦?

 

Cookie 和 XSS 的關係是什麼

一樣的道理,理清楚這二者的關係,先要搞明白什麼是XSS攻擊。

一、XSS是什麼

XSS是因爲不安全的數據引發的,有多是表單提交的數據,有多是頁面路徑的參數問題。

CSRF是經過僞造http請求,來達到本身的攻擊目的。可是XSS是經過盜取用戶的敏感信息而達到攻擊的目的。好比本地存儲、用戶密碼、cookie等等。

好比這個不安全的數據,是一個script標籤,那這個script就能夠連接任意的js文件,瀏覽器本地就會執行這個js,那經過js咱們能作的東西就太多了:

好比document.cookie,獲取用戶信息。

好比經過localStorage,獲取本地存儲的敏感信息(token)。

而後只要是這個頁面展現的任何信息,我均可以獲取。

二、Cookie 如何應對 XSS攻擊

方案一:http-only

Cookie有一個http-only屬性,表示只能被http請求攜帶。

假如你的網站遭受到XSS攻擊,攻擊者就沒法經過document.cookie獲得你的cookie信息。

方案二:正則校驗

咱們瞭解到,XSS是因爲不安全的數據引發的,這些數據的來源,一個重要的渠道就是提交表單,注入到數據庫。因此針對前端,咱們須要把表單數據進行正則驗證,經過驗證以後,才能提交數據。

對於服務端,也應該對接受的數據,進行規則校驗,不符合規則的數據不該該入庫。從接口層面,保證數據安全。

方案三:數據轉義

若是沒法保證數據庫的數據都是安全的,前端能作的事情就是,把全部須要展現到頁面的數據,進行轉義,好比遇到script標籤,直接replace處理。或者遇到標籤標識‘<’以及‘>’這類特殊字符,添加‘\’進行處理。

 

Cookie 和 Token 對比

一、cookie能夠引發csrf攻擊,token在保持用戶會話的時候好一點。

二、因爲http請求攜帶cookie,當cookie過大的時候,會增大http請求的帶寬。

三、cookie的特性,致使了cookie面對CSRF攻擊的時候,很不安全。

Cookie如何作優化

從安全方面,儘可能的使用token,進行會話保持。

從http請求的角度,儘量讓cookie的信息少一點,從而使得http請求的體積更小。

因爲cookie的一個經常使用的做用,是保持用戶會話的,因此僅僅在接口請求的時候,使用cookie。

加載其餘資源,好比圖片、js、css文件等等,能夠託管到CDN上,這樣就不會攜帶cookie,CDN的策略也使得資源加載更快。

相關文章
相關標籤/搜索