cookies

cookies

儲存在用戶本地終端上的數據
Cookie,有時也用其複數形式Cookies。類型為“小型文本文件”,是某些網站為了辨别用戶身份,進行Session跟蹤而儲存在用戶本地終端上的數據(通常經過加密),由用戶客戶端計算機暫時或永久保存的信息。服務器可以利用Cookies包含信息的任意性來篩選并經常性維護這些信息,以判斷在HTTP傳輸中的狀态。Cookies最典型的應用是判定注冊用戶是否已經登錄網站,用戶可能會得到提示,是否在下一次進入此網站時保留用戶信息以便簡化登錄手續,這些都是Cookies的功用。另一個重要應用場合是“購物車”之類處理。用戶可能會在一段時間内在同一家網站的不同頁面中選擇不同的商品,這些信息都會寫入Cookies,以便在最後付款時提取信息。
  • 中文名:儲存在用戶本地終端上的數據
  • 外文名:Cookie
  • 别名:
  • 複數:Cookies
  • 目的:辨别用戶身份
  • 位置:用戶本地終端

簡介

Cookie并不是它的原意“甜餅”的意思,而是一個保存在客戶機中的簡單的文本文件,這個文件與特定的Web文檔關聯在一起,保存了該客戶機訪問這個Web文檔時的信息,當客戶機再次訪問這個Web文檔時這些信息可供該文檔使用。由于“Cookie”具有可以保存在客戶機上的神奇特性,因此它可以幫助我們實現記錄用戶個人信息的功能,而這一切都不必使用複雜的CGI等程序。

舉例來說,一個Web站點可能會為每一個訪問者産生一個唯一的ID,然後以Cookie文件的形式保存在每個用戶的機器上。如果使用浏覽器訪問Web,會看到所有保存在硬盤上的Cookie。在這個文件夾裡每一個文件都是一個由“名/值”對組成的文本文件,另外還有一個文件保存有所有對應的Web站點的信息。在這裡的每個Cookie文件都是一個簡單而又普通的文本文件。透過文件名,就可以看到是哪個Web站點在機器上放置了Cookie(當然站點信息在文件裡也有保存)。

組成

Cookie是一段不超過4KB的小型文本數據,由一個名稱(Name)、一個值(Value)和其它幾個用于控制Cookie有效期、安全性、使用範圍的可選屬性組成。其中:

(1)Name/Value:設置Cookie的名稱及相對應的值,對于認證Cookie,Value值包括Web服務器所提供的訪問令牌。

(2)expires屬性:設置Cookie的生存期。有兩種存儲類型的Cookie:會話性與持久性。Expires屬性缺省時,為會話性Cookie,僅保存在客戶端内存中,并在用戶關閉浏覽器時失效;持久性Cookie會保存在用戶的硬盤中,直至生存期到或用戶直接在網頁中單擊“注銷”等按鈕結束會話時才會失效。

(3)Path屬性:定義了Web站點上可以訪問該Cookie的目錄。

(4)Domain屬性:指定了可以訪問該Cookie的Web站點或域。Cookie機制并未遵循嚴格的同源策略,允許一個子域可以設置或獲取其父域的Cookie。當需要實現單點登錄方案時,Cookie的上述特性非常有用,然而也增加了Cookie受攻擊的危險,比如攻擊者可以借此發動會話定置攻擊。因而,浏覽器禁止在Domain屬性中設置.org、.com等通用頂級域名、以及在國家及地區頂級域下注冊的二級域名,以減小攻擊發生的範圍。

(5)Secure屬性:指定是否使用HTTPS安全協議發送Cookie。使用HTTPS安全協議,可以保護Cookie在浏覽器和Web服務器間的傳輸過程中不被竊取和篡改。該方法也可用于Web站點的身份鑒别,即在HTTPS的連接建立階段,浏覽器會檢查Web網站的SSL證書的有效性。但是基于兼容性的原因(比如有些網站使用自簽署的證書)在檢測到SSL證書無效時,浏覽器并不會立即終止用戶的連接請求,而是顯示安全風險信息,用戶仍可以選擇繼續訪問該站點。由于許多用戶缺乏安全意識,因而仍可能連接到Pharming攻擊所僞造的網站。

(6)HTTPOnly屬性:用于防止客戶端腳本通過document.cookie屬性訪問Cookie,有助于保護Cookie不被跨站腳本攻擊竊取或篡改。但是,HTTPOnly的應用仍存在局限性,一些浏覽器可以阻止客戶端腳本對Cookie的讀操作,但允許寫操作;此外大多數浏覽器仍允許通過XMLHTTP對象讀取HTTP響應中的Set-Cookie頭。

安全威脅

Cookie捕獲/重放

攻擊者可以通過木馬等惡意程序,或使用跨站腳本攻擊等手段偷竊存放在用戶硬盤或内存中的Cookie。借助網絡攻擊手段,包括在不安全的局域網中被動地監聽網絡通信;通過攻擊網絡用戶的路由器,或通過搭建惡意的無線路由器等手法,控制路由基礎設施,将網絡流量重定向到攻擊者控制的主機;發動DNSPharming(域欺騙)攻擊,通過DNS緩存中毒、DNS應答欺騙、或修改用戶端的本地域名解析文件等方法攻擊DNS系統,導緻用戶對合法網站的訪問請求被重定向到惡意網站等等,同樣可能竊取Cookie。對于捕獲到的認證Cookie,攻擊者往往會猜測其中的訪問令牌,試圖獲取會話ID、用戶名與口令、用戶角色、時間戳等敏感信息;或者直接重放該Cookie,假冒受害者的身份發動攻擊。

惡意Cookies

Cookies是文本文件,一般情況下認為它不會造成安全威脅。但是,如果在Cookies中通過特殊标記語言,引入可執行代碼,就很可能給用戶造成嚴重的安全隐患。HTML為區别普通文本和标記語言,用符号“<>”來指示HTML代碼。這些HTML代碼或者定義Web網頁格式,或者引入Web浏覽器可執行代碼段。Web服務器可以使用Cookies信息創建動态網頁。假使Cookies包含可執行惡意代碼段,那麼在顯示合成有該Cookies的網頁時,就會自動執行這段惡意代碼。當然,惡意代碼能否真正造成危害,還取決于Web站點的安全配置策略。

會話定置

會話定置(Session Fixation)攻擊是指,攻擊者向受害者主機注入自己控制的認證Cookie等信息,使得受害者以攻擊者的身份登錄網站,從而竊取受害者的會話信息。注入Cookie的方法包括:使用跨站腳本或木馬等惡意程序;或僞造與合法網站同域的站點,并利用各種方法欺騙用戶訪問該仿冒網站,從而通過HTTP響應中的Set-Cookie頭将攻擊者擁有的該域Cookie發送給用戶等。

CSRF攻擊

跨站請求僞造(Cross-Site Request Forgery,簡稱CSRF)是指,攻擊者可能利用網頁中的惡意代碼強迫受害者浏覽器向被攻擊的Web站點發送僞造的請求,篡奪受害者的認證Cookie等身份信息,從而假冒受害者對目标站點執行指定的操作。Firefox、Opera等浏覽器使用單進程機制,多個窗口或标簽使用同一個進程,共享Cookie等會話數據。IE則混合使用單進程與多進程模式,一個窗口中的多個标簽,以及使用“CTRL+N”或單擊網頁中的鍊接打開的新窗口使用同一進程,共享會話數據;隻有直接運行IE可執行程序打開窗口時,才會創建新的進程。Chrome雖然使用多進程機制,然而經測試發現,其不同的窗口或标簽之間仍會共享會話數據,除非使用隐身訪問方式。因而,用戶同時打開多個浏覽器窗口或标簽訪問互聯網資源時,就為CSRF攻擊篡奪用戶的會話Cookie創造了條件。另外,如果一個Web站點提供持久化Cookie,則CSRF攻擊将更直接、更容易

安全防護

Web服務器端防護

通過Cookie在客戶端與服務器端進行交互,最終實現對用戶身份的認證,Cookie成了用戶整個身份的代替,其安全性決定了整個系統的安全性,Cookie的安全性問題主要有以下幾方面:

(1)Cookie被用戶非法篡改,如篡改其中的expire項,可将Cookie的有效期延長;篡改path項可使用戶能夠訪問服務器上不被授權的内容;或修改domain項,使用戶能夠訪問不被授權的服務器從而獲得合法用戶的信息等;

(2)被非法用戶非法截獲,然後在有限期内重放,則非法用戶将享有合法用戶的合法權益,可能會損害網站方的利益;

(3)若Cookie被服務器加密,而非法用戶通過強力攻擊或其他手段獲得了相應的加密密鑰,則非法用戶可以僞造任何合法Cookie,從而可以訪問合法用戶的所有個性化信息,甚至是賬戶信息等。

面對諸如此類的攻擊手段,有必要從服務器端對Cookie進行安全設計,保護措施主要有:

(1)加入MAC以進行完整性校驗;

(2)防止非法用戶非法截獲後的重放,可以讓用戶對相關信息進行數字簽名,加強有效性驗證;

(3)對Cookie本身進行随機密鑰加密,保證Cookie本身的信息安全。

客戶端浏覽器防護

客戶端浏覽器為了保證本地的Cookie安全,采取了對不同訪問網站的統一Cookie加密,在相應的系統目錄下,隻可看見一個與Cookie相關的加密文件,而且其中的Cookie文件,已被浏覽器加密,用戶不可見,在用戶訪問特定站點的時候,可由浏覽器對cookies文件進行調用并進行解密,将特定站點的Cookie發送到指定的站點服務器中,實現對用戶的Cookie的認證。

主機的安全防護

在原有的服務器端以及客戶端對Cookie的安全性控制下,鑒于不同的客戶端浏覽器對站點的Cookie控制相互獨立,可以采取在客戶端浏覽器對産生的Cookie文件進行基于主機特征的安全性認證,即在浏覽器産生Cookie加密文件時,在Cookie文件中加入一段主機的特征,生成一個雙層加密的新的Cookie文件;在調用Cookie的時候,通過對Cookie文件進行主機特征的匹配,選擇對内層的文件進行解密調用。

然後,對嵌套了主機序列号的内層密文進行二次加密;内層加密保證對源Cookie内容的加密,保證Cookie信息的不可見,外層加密保證對主機特征的保護,以避免對主機特征的替換,通過對Cookie加入主機特征,以及兩次對Cookie加密,可以在原有的防護機制下,為Cookie提供更加安全的保護。

認證機制

在Web認證中,因為HTTP協議本身的局限,必須采用其他技術将相關認證标記以某種方式持續傳送,以免客戶從一個頁面跳轉至另一個頁面時重新輸入認證信息。基于Cookie的認證過程,主要由以下三個階段組成:

(1)發布Cookie。當用戶試圖訪問某Web站點中需要認證的資源時,Web服務器會檢查用戶是否提供了認證Cookie,如果沒有,則将用戶重定向到登錄頁面。在用戶成功登錄後,Web服務器會産生認證Cookie,并通過HTTP響應中的Set-Cookie頭發送給客戶端,用于對用戶随後的請求進行檢查和驗證,接着将用戶重定向到初始請求的資源。

(2)檢索Cookie。在用戶随後的訪問請求中,客戶端浏覽器檢索Path和Domain等屬性與用戶請求資源相匹配的Cookie,并将找到的Cookie通過HTTP請求中的Cookie頭提交給Web服務器。

(3)驗證CookieWeb服務器提取客戶端浏覽器遞交的Cookie,驗證其中的訪問令牌。若合法,則将訪問請求的資源發送給客戶端浏覽器;反之則拒絕用戶的訪問請求。Cookie認證技術簡化了用戶訪問Web網站資源的過程,即用戶隻需在初次登錄網站時輸入身份信息進行認證,随後便可以訪問被授權的所有站點資源,不再需要重複手工提交身份信息。

實例

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

設置

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

寫入與讀取

Cookies集合是附屬于Response對象及Request對象的數據集合,使用時需要在前面加上Response或Request。用于給客戶機發送Cookies的語法通常為:

1

<%Response.cookies(“Cookies名稱”)=數據%>

當給不存在的Cookies集合設置時,就會在客戶機創建,如果該Cookies己存在,則會被代替。由于Cookies是作為HTTP傳輸的頭信息的一部分發給客戶機的,所以向客戶機發送Cookies的代碼一般放在發送給浏覽器的HTML文件的标記之前。如果用戶要讀取Cookies,則必須使用Request對象的Cookies集合,其使用方法是:

1

<%efg=request.cookies(“abc”)(将cookies對象abc的值賦給efg)%>

需要注意的是,隻有在服務器未被下載任何數據給浏覽器前,浏覽器才能與Server進行Cookies集合的數據交換,一旦浏覽器開始接收Server所下載的數據,Cookies的數據交換則停止,為了避免錯誤,要在程序和前面加上response.Buffer=True。

相關詞條

相關搜索

其它詞條