版權歸原作者所有,如有侵權,請聯(lián)系我們

[科普中國]-cookie

科學百科
原創(chuàng)
科學百科為用戶提供權威科普內容,打造知識科普陣地
收藏

Cookie,有時也用其復數(shù)形式 Cookies。類型為“小型文本文件”,是某些網站為了辨別用戶身份,進行Session跟蹤而儲存在用戶本地終端上的數(shù)據(jù)(通常經過加密),由用戶客戶端計算機暫時或永久保存的信息1。

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

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

組成Cookie是一段不超過4KB的小型文本數(shù)據(jù),由一個名稱(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。當需要實現(xiàn)單點登錄方案時,Cookie 的上述特性非常有用,然而也增加了 Cookie受攻擊的危險,比如攻擊者可以借此發(fā)動會話定置攻擊。因而,瀏覽器禁止在 Domain 屬性中設置.org、.com 等通用頂級域名、以及在國家及地區(qū)頂級域下注冊的二級域名,以減小攻擊發(fā)生的范圍3。

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

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

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

惡意 CookiesCookies 是文本文件, 一般情況下認為它不會造成安全威脅。 但是,如果在 Cookies 中通過特殊標記語言,引入可執(zhí)行代碼,就很可能給用戶造成嚴重的安全隱患。HTML 為區(qū)別普通文本和標記語言,用符號“”來指示HTML 代碼。 這些 HTML 代碼或者定義 Web 網頁格式,或者引入 Web 瀏覽器可執(zhí)行代碼段。 Web 服務 器可以使用Cookies 信息創(chuàng)建動態(tài)網頁。假使 Cookies 包含可執(zhí)行惡意代碼段,那么在顯示合成有該 Cookies 的網頁時,就會自動執(zhí)行這段惡意代碼。當然,惡意代碼能否真正造成危害,還取決于Web 站點的安全配置策略4。

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

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

安全防護Web服務器端防護通過Cookie在客戶端與服務器端進行交互,最終實現(xiàn)對用戶身份的認證,Cookie成了用戶整個身份的代替,其安全性決定了整個系統(tǒng)的安全性,Cookie的安全性問題主要有以下幾方面:(1)Cookie被用戶非法篡改,如篡改其中的expire項,可將Cookie的有效期延長;篡改path項可使用戶能夠訪問服務器上不被授權的內容;或修改domain項,使用戶能夠訪問不被授權的服務器從而獲得合法用戶的信息等;(2)被非法用戶非法截獲,然后在有限期內重放,則非法用戶將享有合法用戶的合法權益,可能會損害網站方的利益;(3)若Cookie被服務器加密,而非法用戶通過強力攻擊或其他手段獲得了相應的加密密鑰,則非法用戶可以偽造任何合法Cookie,從而可以訪問合法用戶的所有個性化信息,甚至是賬戶信息等1。

面對諸如此類的攻擊手段,有必要從服務器端對Cookie進行安全設計,保護措施主要有:(1 )加入MAC以進行完整性校驗;(2)防止非法用戶非法截獲后的重放,可以讓用戶對相關信息進行數(shù)字簽名,加強有效性驗證;(3)對Cookie本身進行隨機密鑰加密,保證Cookie本身的信息安全1。

客戶端瀏覽器防護客戶端瀏覽器為了保證本地的Cookie安全,采取了對不同訪問網站的統(tǒng)一Cookie加密,在相應的系統(tǒng)目錄下,只可看見一個與Cookie相關的加密文件,而且其中的Cookie文件,已被瀏覽器加密,用戶不可見,在用戶訪問特定站點的時候,可由瀏覽器對cookies文件進行調用并進行解密,將特定站點的Cookie發(fā)送到指定的站點服務器中,實現(xiàn)對用戶的Cookie的認證1。

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

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

認證機制在 Web認證中 ,因為HTTP協(xié)議本身的局限,必須采用其他技術將相關認證標記以某種方式持續(xù)傳送,以免客戶從一個頁面跳轉至另一個頁面時重新輸入認證信息5?;贑ookie的認證過程,主要由以下三個階段組成:

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

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

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

實例由于Cookies是我們?yōu)g覽的網站傳輸?shù)接脩粲嬎銠C硬盤中的文本文件或內存中的數(shù)據(jù),因此它在硬盤中存放的位置與使用的操作系統(tǒng)和瀏覽器密切相關。在Windows 9X系統(tǒng)計算機中,Cookies文件的存放位置為C:\Windows\Cookies,在Windows NT/2000/XP的計算機中,Cookies文件的存放位置為C:\Documentsand Settings\用戶名\Cookies。硬盤中的Cookies文件可以被Web瀏覽器讀取,它的命令格式為:用戶名@網站地址[數(shù)字].txt。 要注意的是:硬盤中的Cookies屬于文本文件,不是程序6。

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

寫入與讀取Cookies集合是附屬于Response對象及Request對象的數(shù)據(jù)集合,使用時需要在前面加上Response或Request。用于給客戶機發(fā)送Cookies的語法通常為:

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

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

本詞條內容貢獻者為:

孫銳 - 教授 - 合肥工業(yè)大學