複製鏈接
請複製以下鏈接發送給好友

cookie

(儲存在用户本地終端上的數據)

鎖定
Cookie,有時也用其複數形式 Cookies。類型為“小型文本文件”,是某些網站為了辨別用户身份,進行Session跟蹤而儲存在用户本地終端上的數據(通常經過加密),由用户客户端計算機暫時或永久保存的信息 [1] 
中文名
儲存在用户本地終端上的數據
外文名
Cookie
複數形式
Cookies
目    的
辨別用户身份
位    置
用户本地終端

cookie簡介

Cookie 並不是它的原意“甜餅”的意思, 而是一個保存在客户機中的簡單的文本文件, 這個文件與特定的 Web 文檔關聯在一起, 保存了該客户機訪問這個Web 文檔時的信息, 當客户機再次訪問這個 Web 文檔時這些信息可供該文檔使用。由於“Cookie”具有可以保存在客户機上的神奇特性, 因此它可以幫助我們實現記錄用户個人信息的功能, 而這一切都不必使用複雜的CGI等程序 [2] 
舉例來説, 一個 Web 站點可能會為每一個訪問者產生一個唯一的ID, 然後以 Cookie 文件的形式保存在每個用户的機器上。如果使用瀏覽器訪問 Web, 會看到所有保存在硬盤上的 Cookie。在這個文件夾裏每一個文件都是一個由“名/值”對組成的文本文件,另外還有一個文件保存有所有對應的 Web 站點的信息。在這裏的每個 Cookie 文件都是一個簡單而又普通的文本文件。透過文件名, 就可以看到是哪個 Web 站點在機器上放置了Cookie(當然站點信息在文件裏也有保存) [2] 
所謂“cookie”數據是指某些網站為了辨別用户身份,儲存在用户本地終端上的數據(通常經過加密),由用户客户端計算機暫時或永久保存的信息。
通俗來講就是指緩存數據,包括用户名、密碼、註冊賬户、手機號等公民個人信息。 [7] 

cookie組成

Cookie是一段不超過4KB的小型文本數據,由一個名稱(Name)、一個值(Value)和其它幾個用於控制Cookie有效期、安全性、使用範圍的可選屬性組成。其中 [3] 
(1)Name/Value:設置Cookie的名稱及相對應的值,對於認證Cookie,Value值包括Web服務器所提供的訪問令牌 [3] 
(2)Expires屬性:設置Cookie的生存期。有兩種存儲類型的Cookie:會話性與持久性。Expires屬性缺省時,為會話性Cookie,僅保存在客户端內存中,並在用户關閉瀏覽器時失效;持久性Cookie會保存在用户的硬盤中,直至生存期到或用户直接在網頁中單擊“註銷”等按鈕結束會話時才會失效 [3] 
(3)Path屬性:定義了Web站點上可以訪問該Cookie的目錄 [3] 
(4)Domain屬性:指定了可以訪問該 Cookie 的 Web 站點或域。Cookie 機制並未遵循嚴格的同源策略,允許一個子域可以設置或獲取其父域的 Cookie。當需要實現單點登錄方案時,Cookie 的上述特性非常有用,然而也增加了 Cookie受攻擊的危險,比如攻擊者可以藉此發動會話定置攻擊。因而,瀏覽器禁止在 Domain 屬性中設置.org、.com 等通用頂級域名、以及在國家及地區頂級域下注冊的二級域名,以減小攻擊發生的範圍 [3] 
(5)Secure屬性:指定是否使用HTTPS安全協議發送Cookie。使用HTTPS安全協議,可以保護Cookie在瀏覽器和Web服務器間的傳輸過程中不被竊取和篡改。該方法也可用於Web站點的身份鑑別,即在HTTPS的連接建立階段,瀏覽器會檢查Web網站的SSL證書的有效性。但是基於兼容性的原因(比如有些網站使用自簽署的證書)在檢測到SSL證書無效時,瀏覽器並不會立即終止用户的連接請求,而是顯示安全風險信息,用户仍可以選擇繼續訪問該站點。由於許多用户缺乏安全意識,因而仍可能連接到Pharming攻擊所偽造的網站 [3] 
(6)HTTPOnly 屬性 :用於防止客户端腳本通過document.cookie屬性訪問Cookie,有助於保護Cookie不被跨站腳本攻擊竊取或篡改。但是,HTTPOnly的應用仍存在侷限性,一些瀏覽器可以阻止客户端腳本對Cookie的讀操作,但允許寫操作;此外大多數瀏覽器仍允許通過XMLHTTP對象讀取HTTP響應中的Set-Cookie頭 [3] 

cookie安全威脅

Cookie捕獲/重放
攻擊者可以通過木馬等惡意程序,或使用跨站腳本攻擊等手段偷竊存放在用户硬盤或內存中的Cookie。藉助網絡攻擊手段,包括在不安全的局域網中被動地監聽網絡通信;通過攻擊網絡用户的路由器,或通過搭建惡意的無線路由器等手法,控制路由基礎設施,將網絡流量重定向到攻擊者控制的主機;發動DNSPharming(域欺騙)攻擊,通過DNS緩存中毒、DNS應答欺騙、或修改用户端的本地域名解析文件等方法攻擊DNS系統,導致用户對合法網站的訪問請求被重定向到惡意網站等等,同樣可能竊取Cookie。對於捕獲到的認證Cookie,攻擊者往往會猜測其中的訪問令牌,試圖獲取會話ID、用户名與口令、用户角色、時間戳等敏感信息;或者直接重放該Cookie,假冒受害者的身份發動攻擊 [3] 
惡意 Cookies
Cookies 是文本文件, 一般情況下認為它不會造成安全威脅。 但是,如果在 Cookies 中通過特殊標記語言,引入可執行代碼,就很可能給用户造成嚴重的安全隱患。HTML 為區別普通文本和標記語言,用符號“<>”來指示HTML 代碼。 這些 HTML 代碼或者定義 Web 網頁格式,或者引入 Web 瀏覽器可執行代碼段。 Web 服務 器可以使用Cookies 信息創建動態網頁。假使 Cookies 包含可執行惡意代碼段,那麼在顯示合成有該 Cookies 的網頁時,就會自動執行這段惡意代碼。當然,惡意代碼能否真正造成危害,還取決於Web 站點的安全配置策略 [4] 
會話定置
會話定置(Session Fixation)攻擊是指,攻擊者向受害者主機注入自己控制的認證Cookie等信息,使得受害者以攻擊者的身份登錄網站,從而竊取受害者的會話信息。注入Cookie的方法包括:使用跨站腳本木馬等惡意程序;或偽造與合法網站同域的站點,並利用各種方法欺騙用户訪問該仿冒網站,從而通過HTTP響應中的Set-Cookie頭將攻擊者擁有的該域Cookie發送給用户等 [3] 
CSRF攻擊
跨站請求偽造(Cross-Site Request Forgery,簡稱CSRF)是指,攻擊者可能利用網頁中的惡意代碼強迫受害者瀏覽器向被攻擊的Web站點發送偽造的請求,篡奪受害者的認證Cookie等身份信息,從而假冒受害者對目標站點執行指定的操作。FirefoxOpera等瀏覽器使用單進程機制,多個窗口或標籤使用同一個進程,共享Cookie等會話數據。IE則混合使用單進程與多進程模式,一個窗口中的多個標籤,以及使用“Ctrl+N” 或單擊網頁中的鏈接打開的新窗口使用同一進程,共享會話數據;只有直接運行IE可執行程序打開窗口時,才會創建新的進程。Chrome雖然使用多進程機制,然而經測試發現,其不同的窗口或標籤之間仍會共享會話數據,除非使用隱身訪問方式。因而,用户同時打開多個瀏覽器窗口或標籤訪問互聯網資源時,就為CSRF攻擊篡奪用户的會話Cookie創造了條件。另外,如果一個Web站點提供持久化Cookie,則CSRF攻擊將更直接、更容易 [3] 

cookie安全防護

Web服務器端防護
通過Cookie在客户端與服務器端進行交互,最終實現對用户身份的認證,Cookie成了用户整個身份的代替,其安全性決定了整個系統的安全性,Cookie的安全性問題主要有以下幾方面:(1)Cookie被用户非法篡改,如篡改其中的expire項,可將Cookie的有效期延長;篡改path項可使用户能夠訪問服務器上不被授權的內容;或修改domain項,使用户能夠訪問不被授權的服務器從而獲得合法用户的信息等;(2)被非法用户非法截獲,然後在有限期內重放,則非法用户將享有合法用户的合法權益,可能會損害網站方的利益;(3)若Cookie被服務器加密,而非法用户通過強力攻擊或其他手段獲得了相應的加密密鑰,則非法用户可以偽造任何合法Cookie,從而可以訪問合法用户的所有個性化信息,甚至是賬户信息等 [1] 
面對諸如此類的攻擊手段,有必要從服務器端對Cookie進行安全設計,保護措施主要有:(1 )加入MAC以進行完整性校驗;(2)防止非法用户非法截獲後的重放,可以讓用户對相關信息進行數字簽名,加強有效性驗證;(3)對Cookie本身進行隨機密鑰加密,保證Cookie本身的信息安全 [1] 
客户端瀏覽器防護
客户端瀏覽器為了保證本地的Cookie安全,採取了對不同訪問網站的統一Cookie加密,在相應的系統目錄下,只可看見一個與Cookie相關的加密文件,而且其中的Cookie文件,已被瀏覽器加密,用户不可見,在用户訪問特定站點的時候,可由瀏覽器對cookies文件進行調用並進行解密,將特定站點的Cookie發送到指定的站點服務器中,實現對用户的Cookie的認證 [1] 
主機的安全防護
在原有的服務器端以及客户端對Cookie的安全性控制下,鑑於不同的客户端瀏覽器對站點的Cookie控制相互獨立,可以採取在客户端瀏覽器對產生的Cookie文件進行基於主機特徵的安全性認證,即在瀏覽器產生Cookie加密文件時,在Cookie文件中加入一段主機的特徵,生成一個雙層加密的新的Cookie文件;在調用Cookie的時候,通過對Cookie文件進行主機特徵的匹配,選擇對內層的文件進行解密調用 [1] 
然後,對嵌套了主機序列號的內層密文進行二次加密;內層加密保證對源Cookie內容的加密,保證Cookie信息的不可見,外層加密保證對主機特徵的保護,以避免對主機特徵的替換,通過對Cookie加入主機特徵,以及兩次對Cookie加密,可以在原有的防護機制下,為Cookie提供更加安全的保護 [1] 

cookie認證機制

在 Web認證中 ,因為HTTP協議本身的侷限,必須採用其他技術將相關認證標記以某種方式持續傳送,以免客户從一個頁面跳轉至另一個頁面時重新輸入認證信息 [5]  。基於Cookie的認證過程,主要由以下三個階段組成:
(1)發佈Cookie。當用户試圖訪問某Web站點中需要認證的資源時,Web服務器會檢查用户是否提供了認證Cookie,如果沒有,則將用户重定向到登錄頁面。在用户成功登錄後,Web服務器會產生認證Cookie,並通過HTTP響應中的Set-Cookie頭髮送給客户端,用於對用户隨後的請求進行檢查和驗證,接着將用户重定向到初始請求的資源 [5] 
(2)檢索Cookie。在用户隨後的訪問請求中,客户端瀏覽器檢索Path和Domain等屬性與用户請求資源相匹配的Cookie,並將找到的Cookie通過HTTP請求中的Cookie頭提交給Web服務器 [5] 
(3)驗證CookieWeb服務器提取客户端瀏覽器遞交的Cookie,驗證其中的訪問令牌。若合法,則將訪問請求的資源發送給客户端瀏覽器;反之則拒絕用户的訪問請求。Cookie 認證技術簡化了用户訪問 Web 網站資源的過程,即用户只需在初次登錄網站時輸入身份信息進行認證,隨後便可以訪問被授權的所有站點資源,不再需要重複手工提交身份信息 [5] 

cookie實例

由於Cookies是我們瀏覽的網站傳輸到用户計算機硬盤中的文本文件或內存中的數據,因此它在硬盤中存放的位置與使用的操作系統和瀏覽器密切相關。在Windows 9X系統計算機中,Cookies文件的存放位置為C:\Windows\Cookies,在Windows NT/2000/XP的計算機中,Cookies文件的存放位置為C:\Documentsand Settings\用户名\Cookies。硬盤中的Cookies文件可以被Web瀏覽器讀取,它的命令格式為:用户名@網站地址[數字].txt。 要注意的是:硬盤中的Cookies屬於文本文件,不是程序 [6] 

cookie設置

可以在IE的“工具/Internet選項”的“常規”選項卡中,選擇“設置/ 查看文件”,查看所有保存到電腦裏Cookies。這些文件通常是以user@domain格式命名的,user是本地用户名,domain是所訪問的網站的域名。如果使用NetsCape瀏覽器,則存放在“C:\PROGRAMFILES\NETSCAPE\USERS\”裏面,與IE不同的是,NETSCAPE是使用一個Cookie文件記錄所有網站的Cookies。可對Cookie進行適當設置:打開“工具/Internet選項”中的“隱私”選項卡(注意該設置只在IE6.0中存在,其他版本IE可以單擊“工具/Internet選項”|“安全”標籤中的“自定義級別”按鈕,進行簡單調整),調整Cookie的安全級別。通常情況,可以調整到“中高”或者“高”的位置。多數的論壇站點需要使用Cookie信息,如果從來不去這些地方,可以將安全級調到“阻止所有Cookies”;如果只是為了禁止個別網站的Cookie,可以單擊“編輯”按鈕,將要屏蔽的網站添加到列表中。在“高級”按鈕選項中,可以對第一方Cookie和第三方的Cookie進行設置,第一方Cookie是正在瀏覽的網站的Cookie,第三方Cookie是非正在瀏覽的網站發送的Cookie ,通常要對第三方Cookie選擇“拒絕”。如果需要保存Cookie,可以使用IE的“導入導出”功能,打開“文件/導入導出”,按提示操作即可 [6] 

cookie寫入與讀取

Cookies集合是附屬於Response對象Request對象的數據集合,使用時需要在前面加上Response或Request。用於給客户機發送Cookies的語法通常為:
< %Response.cookies(“Cookies名稱”)=數據% > 
當給不存在的Cookies集合設置時,就會在客户機創建,如果該Cookies己存在,則會被代替。由於Cookies 是作為HTTP傳輸的頭信息的一部分發給客户機的,所以向客户機發送Cookies的代碼一般放在發送給瀏覽器的HTML 文件的標記之前。如果用户要讀取Cookies,則必須使用Request對象的Cookies集合,其使用方法是:
< %efg=request.cookies(“abc”) (將cookies對象abc的值賦給efg)% > 
需要注意的是,只有在服務器未被下載任何數據給瀏覽器前,瀏覽器才能與Server進行Cookies集合的數據交換,一旦瀏覽器開始接收Server所下載的數據,Cookies的數據交換則停止,為了避免錯誤,要在程序和前面加上response.Buffer=True [6] 
參考資料
  • 1.    李強, 陳然, 戚江一, et al. 基於主機特徵的Cookie安全研究[J]. 保密科學技術, 2011(4):23-25.
  • 2.    陳芬. 淺析網絡Cookie[J]. 電腦知識與技術, 2005(35):93-95.
  • 3.    梁雪松, LIANGXue-song. 基於Cookie的認證機制及其安全性分析[J]. 通信技術, 2009, 42(6):132-134.
  • 4.    胡晟. 淺析Cookies認證機制及其安全性[J]. 計算機與網絡, 2012, 38(5):69-71.
  • 5.    馬亞娜, 錢煥延, 孫亞民. Cookie在web認證中的應用研究[J]. 小型微型計算機系統, 2004, 25(2):207-210.
  • 6.    萬里. 通通透透了解Cookies[J]. 個人電腦, 2004, 10(12):240-242.
  • 7.    一個“薅羊毛”的故事  .公安部網安局.2022-12-14[引用日期2022-12-14]