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