Cookie使用和安全

Cookie簡介

Cookie分爲“Persistent”和“Non-Persistent”類型。 “PersistentCookie在瀏覽器關閉後,Cookie會保存在硬盤上;”Non-Persistent” Cookie只是存在內存中,當瀏覽器關閉時,Cookie消失。

瀏覽器通常都提供管理Cookie的功能。

 

Cookie內容

一條Cookie通常由多個“屬性=值”格式的元素組成。例如下面是用戶登錄Gmail時產生的一條Cookie

Set­Cookie: GV=; Domain=mail.google.com; Expires=Sun, 09­Oct­05 13:47:42 GMT; Path=/mail

如上例子,一條Cookie通常有5條參數:

l Cookie的名稱  (GV)

l Cookie的值    (空白)

l Cookie的有效期  (Sun, 09­Oct­05 13:47:42 GMT

l Cookie有效的域名  (mail.google.com)

l Cookie有效的路徑  (/mail)

除了以上5個參數外,還有其他一些參數,例如爲了安全行,可以加上secureHttpOnly

 

Cookie的安全風險

下面列舉一些例子,說明了使用cookie可能帶來的安全隱患,以及消除這些隱患的方法。

 

1. 域名使用不當

從上面的Cookie例子中可以看到,每條Cookie有一個域名,限定Cookie生效的範圍。例如mail.google.com,這樣這條cookie只能在這個域名上生效,如果是google.com,就不能生效了,但是在子域名內,例如pop3.mail.google.com應該還是生效。但是如果有人把cookie域名寫成了.com或者.edu或者.net等,這樣這個cookie對大量的網域都有效。爲此有標準“RFC 2965[描述http狀態管理的文檔]專門規定,默認下,對這樣只包含根域名的cookie一概禁止。

儘管如此,風險依然存在,例如一個網站www.abcfootball.com,登錄後cookie的域名應該是public.abcfootball.com,但是如果設置成了abcfootball.com,那麼意味着cookiepublic.abcfootball.comprivate.abcfootball.com,以及一切子域都有效,這樣這條cookie可能會讓用戶訪問到權限限定反問之外的資源。

避免的方法很簡單,就是把cookie的域名限定儘量設置準確,詳細。

 

2. 路徑使用不當

  這個和“域名使用不當”類似,當cookie的限定訪問路徑設置過大時候,意味着cookie對所有子目錄都是有效的,會帶來非法訪問的可能。例如剛纔例子中路徑“/mail”設置成了根目錄“/”,用戶有可能用這條cookie訪問到除“/mail”之外的資源.

 

3. “Persistent” Cookie保存登錄信息

許多網站在登錄時使用類似於“記住登錄信息”的功能。這樣用戶登錄的信息【例如用戶名,密碼】會以“PersistentCookie的形式保存在硬盤上,例如登錄Gmail時候,保存的cookie可能是:

    Set­Cookie: rememberme=true;Domain=.google.com;Path=/;Expires=Thu, 21­Apr­2016   12:03:07 GMT

   這樣用戶在cookie過期之前再登錄google.com,網頁會直接進入gmailinbox頁面這樣產生的巨大風險是,當其他用戶使用此機器時,一樣就自動進入你的郵箱了。

   避免的方法是,當使用完郵箱後,應使用“登出”而不是直接關掉瀏覽器。開發者處理敏感信息登錄時,儘量採用Session機制,SessionID 默認使用“Non PersistentCookie保存,當“登出”或關閉瀏覽器時,就會自動從內存中消失。

 

4. “Persistent” Cookie保存敏感信息

和上面一樣,當用戶輸入敏感信息進行業務後,這些信息會保存在機器本地,例如網上購物,用戶的信用卡信息會保留在磁盤上。

避免這種風險的方法是,儘量少用公共機進行這樣業務;或者在業務完成後,使用瀏覽器的安全管理工具,刪除掉所有的Cookie

 

5. 明文傳輸Cookie

Cookie經常用來存儲一些敏感信息,例如session id,如果明文在網上傳輸,傳輸過程中很可能被竊取。爲了保證cookie不被竊取,需要在cookie中加上“Secure”的屬性,這樣瀏覽器也能意識到這是敏感信息,會以不同的security level來對待;會提醒用戶,建議以SSL方式來連接,在cookie返回Server時,也以不同的安全級別來傳輸。

 

6. 緩存中的Cookie

現在緩存被大量應用,以提高網站訪問性能。如果包含個人敏感信息的Cookie被存儲在緩存上,很可能造成這些信息泄漏。

爲避免這種情況,在ResponseHeader中加上去除緩存的屬性:

Cache­control: no­cache="set­cookie" 

或者

Cache­control: no­cache="set­cookie2"

一些私有頁面同樣也不應該被緩存,應該在Header中加上:

Cache­control: private

 

7. 跨域腳本攻擊(CSS: Cross Site Scripting Attack

CSS是最普遍的網絡攻擊手段之一。通過一段惡意的腳本代碼,偷取用戶本地有效的Cookie,然後發送給惡意攻擊者,這些信息可能被非法應用。

網上防範的方法有很多,這裏介紹一種方式,給Cookie加上HttpOnly的屬性:

Set­Cookie: USER=123; expires=Wednesday, 20­Apr­06 23:12:40 GMT; HttpOnly

“HttpOnly”屬性能保證這條Cookie不能被腳本語言執行獲取到,而被髮送到第三方。這樣能保證這條Cookie的安全。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章