劉國(guó)慶
【摘 要】幾乎每個(gè)網(wǎng)站都難以離開 Cookie,但 Cookie 的使用因其貌似簡(jiǎn)單,而很容易被人輕視。用戶上網(wǎng)的隱私信息會(huì)自動(dòng)記錄在Cookie文件中,因此其安全問題尤為重要。
【關(guān)鍵詞】Cookie 瀏覽器 安全
【中圖分類號(hào)】TP31 【文獻(xiàn)標(biāo)識(shí)碼】A 【文章編號(hào)】1672-5158(2013)03-0119-01
一、引言
當(dāng)今的網(wǎng)絡(luò)時(shí)代,上網(wǎng)已經(jīng)是很多人工作和生活中必不可少的一項(xiàng)活動(dòng),在登陸某些網(wǎng)站時(shí)難免會(huì)輸入用戶名和密碼,用戶殊不知自己的用戶名和密碼等重要的隱私信息會(huì)被瀏覽器默默記錄在電腦上,記錄的形式則是Cookie文件。在今年的中央電視臺(tái)3.15晚會(huì)也曾曝光一些信息服務(wù)商跟蹤并竊取上網(wǎng)用戶的Cookie,來達(dá)到謀取非法利益的目的。由此可見Cookie文件的重要性,那么用戶在上網(wǎng)時(shí)如何提高自己的Cookie安全性。
二、Cookie的使用
Cookie是由服務(wù)器端生成,發(fā)送給User-Agent(一般是瀏覽器),瀏覽器會(huì)將Cookie的keyalue保存到某個(gè)目錄下的文本文件內(nèi),下次請(qǐng)求同一網(wǎng)站時(shí)就發(fā)送該Cookie給服務(wù)器(前提是瀏覽器設(shè)置為啟用cookie)。Cookie名稱和值可以由服務(wù)器端開發(fā)自己定義,對(duì)于JSP而言也可以直接寫入jsessionid,這樣服務(wù)器可以知道該用戶是否合法用戶以及是否需要重新登錄等。
服務(wù)器可以利用Cookies包含信息的任意性來篩選并經(jīng)常性維護(hù)這些信息,以判斷在HTTP傳輸中的狀態(tài)。Cookies最典型的應(yīng)用是判定注冊(cè)用戶是否已經(jīng)登錄網(wǎng)站,另一個(gè)重要應(yīng)用場(chǎng)合是“購(gòu)物車”之類處理。用戶可能會(huì)在一段時(shí)間內(nèi)在同一家網(wǎng)站的不同頁(yè)面中選擇不同的商品,這些信息都會(huì)寫入Cookies,以便在最后付款時(shí)提取信息。
Cookie可以保持登錄信息到用戶下次與服務(wù)器的會(huì)話。而還有一些Cookie在用戶退出會(huì)話的時(shí)候就被刪除了,這樣可以有效保護(hù)個(gè)人隱私。但大多數(shù)Cookie是不會(huì)自動(dòng)刪除的,且在用戶上網(wǎng)時(shí)Cookie就可能被在線盜取。
三、Cookie的安全研究
Cookie在生成時(shí)就會(huì)被指定一個(gè)Expire值,這就是Cookie的生存周期,在這個(gè)周期內(nèi)Cookie有效,超出周期Cookie就會(huì)被清除。
Cookie由變量名和值組成,類似Javascript變量。其屬性里既有標(biāo)準(zhǔn)的Cookie變量,也有用戶自己創(chuàng)建的變量,屬性中變量是用“變量=值”形式來保存。根據(jù)Netscape公司的規(guī)定,Cookie格式如下:
Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE
NAME=VALUE:
這是每一個(gè)Cookie均必須有的部分。NAME是該Cookie的名稱,VALUE是該Cookie的值。在字符串“NAME=VALUE”中,不含分號(hào)、逗號(hào)和空格等字符。
Expires=DATE:Expires變量是一個(gè)只寫變量,它確定了Cookie有效終止日期。該屬性值DATE必須以特定的格式來書寫:星期幾,DD-MM-YY HH:MM:SS GMT,GMT表示這是格林尼治時(shí)間。反之,不以這樣的格式來書寫,系統(tǒng)將無法識(shí)別。該變量可省,如果缺省時(shí),則Cookie的屬性值不會(huì)保存在用戶的硬盤中,而僅僅保存在內(nèi)存當(dāng)中,Cookie文件將隨著瀏覽器的關(guān)閉而自動(dòng)消失。
Domain=DOMAIN-NAME:Domain該變量是 一個(gè)只寫變量,它確定了哪些Internet域中的Web服務(wù)器可讀取瀏覽器所存取的Cookie,即只有來自這個(gè)域的頁(yè)面才可以使用Cookie中的信息。這項(xiàng)設(shè)置是可選的,如果缺省時(shí),設(shè)置Cookie的屬性值為該Web服務(wù)器的域名。
Path=PATH:Path屬性定義了Web服務(wù)器上哪些路徑下的頁(yè)面可獲取服務(wù)器設(shè)置的Cookie。一般如果用戶輸入的URL中的路徑部分從第一個(gè)字符開始包含Path屬性所定義的字符串,瀏覽器就認(rèn)為通過檢查。如果Path屬性的值為“/”,則Web服務(wù)器上所有的WWW資源均可讀取該Cookie。同樣該項(xiàng)設(shè)置是可選的,如果缺省時(shí),則Path的屬性值為Web服務(wù)器傳給瀏覽器的資源的路徑名。
可以看出我們借助對(duì)Domain和Path兩個(gè)變量的設(shè)置,即可有效地控制Cookie文件被訪問的范圍。
Secure:在Cookie中標(biāo)記該變量,表明只有當(dāng)瀏覽器和Web Server之間的通信協(xié)議為加密認(rèn)證協(xié)議時(shí),瀏覽器才向服務(wù)器提交相應(yīng)的Cookie。當(dāng)前這種協(xié)議只有一種,即為HTTPS。
Cookies以鍵值的方式記錄會(huì)話跟蹤的內(nèi)容.服務(wù)器利用響應(yīng)報(bào)頭Set-Cookie來發(fā)送COOKIE信息.在RFC2109中定義的SET-COOKIE響應(yīng)報(bào)頭的格式為:
Set-Cookie: Name = Value; Comment = value; Domain = value; Max-Age = value; Path = Value; Secure; Version = 1 * DIGIT;
Name 是Cookie的名字,Value是它的值.Name=Value屬性值對(duì)必須首先出現(xiàn),在此之后的屬性-值對(duì)可以以任何順序出現(xiàn). 在Servlet規(guī)范中,用于會(huì)話跟蹤的cookie的名字必須是JSESSIONID,Comment屬性是可選的,因?yàn)镃ookie可能包含其它有關(guān)用戶私有的信息.這個(gè)屬性允許服務(wù)器說明這個(gè)Cookie的使用,Domain屬性是可選的.它用來指定Cookie在哪一個(gè)域中有效.所指定的域必須以點(diǎn)號(hào)(.)來開始.Max-Age屬性是可選的,用于定義Cookie的生存時(shí)間,以秒為單位.Path屬性是可選的,用于指定這個(gè)cookie在哪一個(gè)URL子集下有效.Secure屬性是必需的,它的值是一個(gè)十進(jìn)制數(shù),標(biāo)識(shí)cookie依照的狀態(tài)管理規(guī)范的版本.例如:
set-cookie: uid = zhangsan; Max-Age=3600; Domain=.sunxin.org; Path=s; Version=1
它表示一個(gè)名為uid,值為zhangsan的cookie.生存時(shí)間為3600秒,在sunxin.org域的 bbs路徑下有效.在3600秒后,客戶端將拋棄這個(gè)cookie.