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


Cookie是什么

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

它的作用:

  • 經常用來做一些用戶會話狀態管理、個性化設置等等。

  • 前端可以通過document.cookie來訪問cookie。

  • cookie是跨域的,也就是在不同的域名中,訪問的cookie的時候,只能訪問對應的域名的cookie。

 

Cookie 和 CSRF 的關系是什么

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

1、CSRF是什么?

CSRF,中文名叫跨站請求偽造,發生的場景就是,用戶登陸了a網站,然后跳轉到b網站,b網站直接發送一個a網站的請求,進行一些危險操作,就發生了CSRF攻擊!

這時候,懂得這個CSRF了嗎?我認為一部分同學依然不懂,因為我看過太多這樣的描述了!

因為有這么一些疑惑,為什么在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等信息進行攻擊的。

2、Cookie相關特性?

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

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

2、攜帶的cookie,還是http請求所在域名的cookie。

3、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攻擊。

1、XSS是什么

XSS是由於不安全的數據引起的,有可能是表單提交的數據,有可能是頁面路徑的參數問題。

CSRF是通過偽造http請求,來達到自己的攻擊目的。但是XSS是通過盜取用戶的敏感信息而達到攻擊的目的。比如本地存儲、用戶密碼、cookie等等。

比如這個不安全的數據,是一個script標簽,那這個script就可以鏈接任意的js文件,瀏覽器本地就會執行這個js,那通過js我們能做的東西就太多了:

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

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

然后只要是這個頁面展示的任何信息,我都可以獲取。

2、Cookie 如何應對 XSS攻擊

方案一:http-only

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

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

方案二:正則校驗

我們了解到,XSS是由於不安全的數據引起的,這些數據的來源,一個重要的渠道就是提交表單,注入到數據庫。所以針對前端,我們需要把表單數據進行正則驗證,通過驗證之后,才能提交數據。

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

方案三:數據轉義

如果無法保證數據庫的數據都是安全的,前端能做的事情就是,把所有需要展示到頁面的數據,進行轉義,比如遇到script標簽,直接replace處理。或者遇到標簽標識‘<’以及‘>’這類特殊字符,添加‘\’進行處理。

 

Cookie 和 Token 對比

1、cookie可以引起csrf攻擊,token在保持用戶會話的時候好一點。

2、由於http請求攜帶cookie,當cookie過大的時候,會增大http請求的帶寬。

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

Cookie如何做優化

從安全方面,盡量的使用token,進行會話保持。

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

由於cookie的一個常用的作用,是保持用戶會話的,所以僅僅在接口請求的時候,使用cookie。

加載其他資源,比如圖片、js、css文件等等,可以托管到CDN上,這樣就不會攜帶cookie,CDN的策略也使得資源加載更快。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM