COOKIES原理以及解析
Cookie 現(xiàn)在經(jīng)常被大家提到,那么到底什么是Cookie ,它有什么作用呢?Cookie 是一種能夠讓網(wǎng)站服務(wù)器把少量數(shù)據(jù)儲(chǔ)存到客戶端的硬盤或內(nèi)存,或是從客戶端的硬盤讀取數(shù)據(jù)的一種技術(shù)。Cooki
Cookie 現(xiàn)在經(jīng)常被大家提到,那么到底什么是Cookie ,它有什么作用呢?Cookie 是一種能夠讓網(wǎng)站服務(wù)器把少量數(shù)據(jù)儲(chǔ)存到客戶端的硬盤或內(nèi)存,或是從客戶端的硬盤讀取數(shù)據(jù)的一種技術(shù)。Cookie 是當(dāng)你瀏覽某網(wǎng)站時(shí),由Web 服務(wù)器置于你硬盤上的一個(gè)非常小的文本文件,它可以記錄你的用戶ID 、密碼、瀏覽過的網(wǎng)頁、停留的時(shí)間等信息。
當(dāng)你再次來到該網(wǎng)站時(shí),網(wǎng)站通過讀取Cookie ,得知你的相關(guān)信息,就可以做出相應(yīng)的動(dòng)作,如在頁面顯示歡迎你的標(biāo)語,或者讓你不用輸入ID 、密碼就直接登錄等等。從本質(zhì)上講,它可以看作是你的身份證。但Cookie 不能作為代碼執(zhí)行,也不會(huì)傳送病毒,且為你所專有,并只能由提供它的服務(wù)器來讀取。保存的信息片斷以“名/值”對(duì)(name-value pairs)的形式儲(chǔ)存,一個(gè)“名/值”對(duì)僅僅是一條命名的數(shù)據(jù)。一個(gè)網(wǎng)站只能取得它放在你的電腦中的信息,它無法從其它的Cookie 文件中取得信息,也無法得到你的電腦上的其它任何東西。 Cookie 中的內(nèi)容大多數(shù)經(jīng)過了加密處理,因此一般用戶看來只是一些毫無意義的字母數(shù)字組合,只有服務(wù)器的CGI 處理程序才知道它們真正的含義。 由于Cookie 是我們?yōu)g覽的網(wǎng)站傳輸?shù)接脩粲?jì)算機(jī)硬盤中的文本文件或內(nèi)存中的數(shù)據(jù),因此它在硬盤中存放的位置與使用的操作系統(tǒng)和瀏覽器密切相關(guān)。在Windows 9X系統(tǒng)計(jì)算機(jī)中,Cookie 文件的存放位置為
C:/Windows/Cookie,在Windows NT/2000/XP的計(jì)算機(jī)中,Cookie 文件的存放位置為C:/Documents and Settings/用戶名/Cookie。
硬盤中的Cookie 文件可以被Web 瀏覽器讀取,它的命令格式為:用戶名@網(wǎng)站地址[數(shù)字].txt。如筆者計(jì)算機(jī)中的一個(gè)Cookie 文件名為:
ch@163[1].txt。要注意的是:硬盤中的Cookie 屬于文本文件,不是程序。 Cookie 的設(shè)置
你可以在IE 的“工具/Internet選項(xiàng)”的“常規(guī)”選項(xiàng)卡中,選擇“設(shè)置/查看文件”,查看所有保存到你電腦里的Cookie 。這些文件通常是以u(píng)ser@domain格式命名的,user 是你的本地用戶名,domain 是所訪問的網(wǎng)站的域名。如果你使用NetsCape 瀏覽器,則存放在“C:/PROGRAMFILES/NETS-
CAPE/USERS/”里面,與IE 不同的是,NETSCAPE 是使用一個(gè)Cookie 文件記錄所有網(wǎng)站的Cookie 。
我們可對(duì)Cookie 進(jìn)行適當(dāng)設(shè)置:打開“工具/Internet選項(xiàng)”中的“隱私”選項(xiàng)卡(注意該設(shè)置只在IE6.0中存在,其他版本IE 可以單擊“工具/Internet選項(xiàng)” “安全”標(biāo)簽中的“自定義級(jí)別”按鈕,進(jìn)行簡(jiǎn)單調(diào)整),調(diào)整Cookie 的安全級(jí)別。通常情況,可以調(diào)整到“中高”或者“高”的位置。多數(shù)的論壇站點(diǎn)需要使用Cookie 信息,如果你從來不去這些地方,可以將安全級(jí)調(diào)到“阻止所有
Cookie ”;如果只是為了禁止個(gè)別網(wǎng)站的Cookie ,可以單擊“編輯”按鈕,將要屏蔽的網(wǎng)站添加到列表中。在“高級(jí)”按鈕選項(xiàng)中,你可以對(duì)第一方Cookie 和第三方的Cookie 進(jìn)行設(shè)置,第一方Cookie 是你正在瀏覽的網(wǎng)站的Cookie ,第三方Cookie 是非正在瀏覽的網(wǎng)站發(fā)給你的Cookie ,通常要對(duì)第三方Cookie 選擇“拒絕”。你如果需要保存Cookie ,可以使用IE 的“導(dǎo)入導(dǎo)出”功能,打開“文件/導(dǎo)入導(dǎo)出”,按提示操作即可。
Cookie 的寫入與讀取
Cookie 集合是附屬于Response 對(duì)象及Request 對(duì)象的數(shù)據(jù)集合,使用時(shí)需要在前面加上Response 或Request 。
,用于給客戶機(jī)發(fā)送Cookie 的語法通常為:
當(dāng)給不存在的Cookie 集合設(shè)置時(shí),就會(huì)在客戶機(jī)創(chuàng)建,如果該Cookie 己存在,則會(huì)被代替。由于Cookie 是作為HTTP 傳輸?shù)念^信息的一部分發(fā)給客戶機(jī)的,所以向客戶機(jī)發(fā)送Cookie 的代碼一般放在發(fā)送給瀏覽器的HTML 文件的標(biāo)記之前。
如果用戶要讀取Cookie ,則必須使用Request 對(duì)象的Cookie 集合,其使用方法是: 需要注意的是,只有在服務(wù)器未被下載任何數(shù)據(jù)給瀏覽器前,瀏覽器才能與Server 進(jìn)行Cookie 集合的數(shù)據(jù)交換,一旦瀏覽器開始接收Server 所下載的數(shù)據(jù),Cookie 的數(shù)據(jù)交換則停止,為了避免錯(cuò)誤,要在程序和前面加上response.Buffer=True。
Cookie 的應(yīng)用
幾乎所有的網(wǎng)站設(shè)計(jì)者在進(jìn)行網(wǎng)站設(shè)計(jì)時(shí)都使用了Cookie ,因?yàn)樗麄兌枷虢o瀏覽網(wǎng)站的用戶提供一個(gè)更友好的、人文化的瀏覽環(huán)境,同時(shí)也能更加準(zhǔn)確地收集訪問者的信息。
網(wǎng)站瀏覽人數(shù)管理
由于代理服務(wù)器、緩存等的使用,唯一能幫助網(wǎng)站精確統(tǒng)計(jì)來訪人數(shù)的方法就是為每個(gè)訪問者建立一個(gè)唯一的ID 。使用Cookie ,網(wǎng)站可以完成以下工作:測(cè)定多少人訪問過;測(cè)定訪問者中有多少是新用戶(即第一次來訪),多少是老用戶;測(cè)定一個(gè)用戶多久訪問一次網(wǎng)站。
通常情況下,網(wǎng)站設(shè)計(jì)者是借助后臺(tái)數(shù)據(jù)庫(kù)來實(shí)現(xiàn)以上目的的。當(dāng)用戶第一次訪問該網(wǎng)站時(shí),網(wǎng)站在數(shù)據(jù)庫(kù)中建立一個(gè)新的ID ,并把ID 通過Cookie 傳送給用戶。用戶再次來訪時(shí),網(wǎng)站把該用戶ID 對(duì)應(yīng)的計(jì)數(shù)器加1,得到用戶的來訪次數(shù)或判斷用戶是新用戶還是老用戶。
按照用戶的喜好定制網(wǎng)頁外觀
有的網(wǎng)站設(shè)計(jì)者,為用戶提供了改變網(wǎng)頁內(nèi)容、布局和顏色的權(quán)力,允許用戶輸入自己的信息,然后通過這些信息對(duì)網(wǎng)站的一些參數(shù)進(jìn)行修改,以定制網(wǎng)頁的外觀。
在電子商務(wù)站點(diǎn)中實(shí)現(xiàn)諸如“購(gòu)物籃”等功能
可以使用Cookie 記錄用戶的ID ,這樣當(dāng)你往“購(gòu)物籃”中放了新東西時(shí),網(wǎng)站就能記錄下來,并在網(wǎng)站的數(shù)據(jù)庫(kù)里對(duì)應(yīng)著你的ID 記錄當(dāng)你“買單”時(shí),網(wǎng)站通過ID 檢索數(shù)據(jù)庫(kù)中你的所有選擇就能知道你的“購(gòu)物籃”里有些什么。 在一般的事例中,網(wǎng)站的數(shù)據(jù)庫(kù)能夠保存的有你所選擇的內(nèi)容、你瀏覽過的網(wǎng)頁、你在表單里填寫的信息等;而包含有你的唯一ID 的Cookie 則保存在你的電腦里。
Cookie 的缺陷
Cookie 雖然被廣泛的應(yīng)用,并能做到一些使用其它技術(shù)不可能實(shí)現(xiàn)的功能。但也存在一些不夠完美的方面,給應(yīng)用帶來不便。
多人共用一臺(tái)電腦的問題
任何公共場(chǎng)合的電腦或者許多在辦公室或家里使用的電腦,都會(huì)同時(shí)被兩個(gè)以上的人使用。這樣,當(dāng)你用它在網(wǎng)上超市購(gòu)物時(shí),網(wǎng)上超市或網(wǎng)站會(huì)在這臺(tái)機(jī)器上留下一個(gè)Cookie ,將來也許就會(huì)有某個(gè)人試圖使用你的賬戶購(gòu)物,帶來了不安全的可能。當(dāng)然,在一些使用多用戶操作系統(tǒng)如Windows NT或UNIX 的電腦上,這并不會(huì)成為一個(gè)問題。因?yàn)樵诙嘤脩舨僮飨到y(tǒng)下不同的賬戶的Cookie
,分別放在不同的地方。
Cookie 被刪除時(shí)
假如你的瀏覽器不能正常工作,你可能會(huì)刪除電腦上所有的臨時(shí)Internet 文件。然而,一旦這樣操作以后,你就會(huì)丟掉所有的Cookie 文件。當(dāng)你再次訪問一個(gè)網(wǎng)站時(shí),網(wǎng)站會(huì)認(rèn)為你是一位新用戶并分配給你一個(gè)新的用戶ID 以及一個(gè)新的Cookie 。結(jié)果將會(huì)造成網(wǎng)站統(tǒng)計(jì)的新老用戶比發(fā)生偏差,而你也難以恢復(fù)過去保存的參數(shù)選擇。
一人使用多臺(tái)電腦時(shí)
有的人一天之中經(jīng)常使用一臺(tái)以上的電腦。例如在辦公室里有一臺(tái)電腦、家里有一臺(tái)、還有移動(dòng)辦公用的筆記本電腦。除非網(wǎng)站使用了特別的技術(shù)來解決這一問題,否則,你將會(huì)有三個(gè)不同的Cookie 文件在這三臺(tái)機(jī)器上,而在三臺(tái)機(jī)器上訪問過的任何網(wǎng)站都將會(huì)把你看成三個(gè)不同的用戶。
防范Cookie 泄密
想知道你訪問的網(wǎng)站是否在你的硬盤或內(nèi)存中寫入了Cookie 信息嗎?只
需執(zhí)行下面的操作步驟,就可以了解和控制你正在訪問的網(wǎng)站的Cookie 信息。 步驟一點(diǎn)擊IE 窗口中的“工具” “In-ernet 選項(xiàng)”,打開“Internet選項(xiàng)”設(shè)置窗口;
步驟二點(diǎn)擊“Internet選項(xiàng)”設(shè)置窗口中的“安全”標(biāo)簽,然后再點(diǎn)擊“自定義級(jí)別”按鈕,進(jìn)入“安全設(shè)置”窗口;
步驟三 找到“安全設(shè)置”窗口中的“Cookie ”設(shè)置項(xiàng)?!癈ookie ”設(shè)置項(xiàng)下有兩個(gè)分選項(xiàng),其中“允許使用存儲(chǔ)在您計(jì)算機(jī)上的ookies”是針對(duì)存儲(chǔ)在用戶計(jì)算機(jī)硬盤中的Cookie 文件;“允許使用每個(gè)對(duì)話Cookie (未存儲(chǔ))”是針對(duì)存儲(chǔ)在用戶計(jì)算機(jī)內(nèi)存中的Cookie 信息。存儲(chǔ)在硬盤中的Cookie 文件是永久存在的,而存儲(chǔ)在內(nèi)存中的Cookie 信息是臨時(shí)的。要想IE 在即將接收來自Web 站點(diǎn)的所有Cookie 時(shí)進(jìn)行提示,可分別選擇上面兩個(gè)分選項(xiàng)中的“提示”項(xiàng)。當(dāng)然,你也可以選擇“啟用”,允許IE 接受所有的Cookie 信息(這也是IE 的默認(rèn)選項(xiàng));選擇“禁止”,則是不允許Web 站點(diǎn)將Cookie 存儲(chǔ)到您的計(jì)算機(jī)上,而且Web 站點(diǎn)也不能讀取你計(jì)算機(jī)中已有的Cookie 。
IE6.0提供了更為可靠的個(gè)人隱私及安全保護(hù)措施,可以讓用戶來控制瀏覽器向外發(fā)送信息的多少。在“Internet 選項(xiàng)”窗口中新增了“隱私”選項(xiàng)卡(圖1),用戶可以在其中直接設(shè)置瀏覽時(shí)的隱私級(jí)別,按需要控制其他站點(diǎn)對(duì)自己電腦所使用的Cookie 。 如果我們正在瀏覽的站點(diǎn)使用了Cookie ,那么在瀏覽器狀態(tài)欄中會(huì)有一個(gè)黃色驚嘆號(hào)的標(biāo)記,雙擊后可打開“隱私報(bào)告”對(duì)話框,用戶可以在其中查看具體的隱私策略,還可直接點(diǎn)擊“設(shè)置”按鈕后在上述“隱私”選項(xiàng)卡中調(diào)節(jié)安全隱私級(jí)別。
在“常規(guī)”選項(xiàng)卡中還增加了“刪除Cookie ”按鈕(圖2),方便用戶直接清除本機(jī)上的Cookie 。另外,在“工具” “選項(xiàng)” “高級(jí)”選項(xiàng)卡中也增加了一些進(jìn)一步提高安全性的選項(xiàng)(如關(guān)閉瀏覽器時(shí)清空Internet 臨時(shí)文件)。其實(shí),如何更好地保護(hù)個(gè)人隱私和安全是微軟下一代“.NET”戰(zhàn)略軟件中的關(guān)鍵技術(shù),現(xiàn)在IE6.0已經(jīng)嘗試著邁出了第一步。
另外,由于Cookie 的信息并不都是以文件形式存放在計(jì)算機(jī)里,還有部分信息保存在內(nèi)存里。比如你在瀏覽網(wǎng)站的時(shí)候,Web 服務(wù)器會(huì)自動(dòng)在內(nèi)存中生成Cookie ,當(dāng)你關(guān)閉IE 瀏覽器的時(shí)候又自動(dòng)把Cookie 刪除,那樣上面介紹的兩種方法就起不了作用,我們需要借助注冊(cè)表編輯器來修改系統(tǒng)設(shè)置。要注意的
,是,修改注冊(cè)表前請(qǐng)作備份,以便出現(xiàn)問題后能順利恢復(fù)。
運(yùn)行Regedit ,找到如下鍵值:
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Internet Settings/Cache/Special Paths/Cookie,這是Cookie 在內(nèi)存中的鍵值,把這個(gè)鍵值刪除。至此Cookie 無論以什么形式存在,我們都不用再害怕了。
最后有必要說明的一點(diǎn)是:杜絕Cookie 雖然可以增強(qiáng)你電腦的信息安全程度,但這樣做同樣會(huì)有一些弊端。比如在一些需要Cookie 支持的網(wǎng)頁上,會(huì)發(fā)生一些莫名其妙的錯(cuò)誤,典型的例子就是你以后不能使用某些網(wǎng)站的免費(fèi)信箱了。
Cookie 欺騙
通過分析Cookie 的格式,我們知道,最后兩項(xiàng)中分別是它的URL 路徑和域名,服務(wù)器對(duì)Cookie 的識(shí)別靠的就是這兩個(gè)參數(shù)。正常情況下,我們要瀏覽一個(gè)網(wǎng)站時(shí)輸入的URL 便是它的域名,需要經(jīng)過域名管理系統(tǒng)DNS 將其轉(zhuǎn)化為IP 地址后進(jìn)行連接。若能在DNS 上進(jìn)行一些設(shè)置,把目標(biāo)域名的IP 地址對(duì)應(yīng)到其它站點(diǎn)上,我們便可以非法訪問目標(biāo)站點(diǎn)的Cookie 了。
要進(jìn)行Cookie 欺騙,其實(shí)很簡(jiǎn)單。比如在Win9X 下的安裝目錄下,有一名為hosts.sam 的文件,以文本方式打開后會(huì)看到這樣的格式: 127.0.0.1 localhost
經(jīng)過設(shè)置,便可以實(shí)現(xiàn)域名解析的本地化,只需將IP 和域名依上面的格式添加到文件中并另存為hosts 即可。hosts 文件實(shí)際上可以看成一個(gè)本機(jī)的DNS 系統(tǒng),它可以負(fù)責(zé)把域名解釋成IP 地址,它的優(yōu)先權(quán)比DNS 服務(wù)器要高,它的具體實(shí)現(xiàn)是TCP/IP協(xié)議中的一部分。
比如我們要讀取的目標(biāo)站點(diǎn) www.abc.com 所生成的Cookie 信息,可以借助www.def.com (自己的站點(diǎn))。www.def.com 存放用來進(jìn)行欺騙所需的文件,通過它讀取和修改對(duì)方的Cookie 。
步驟一 pingwww.def.com 的IP 地址:
ping www.def.com
Reply from 192.168.0.1: bytes=32 time=20ms TTL=244 然后修改hosts.sam 文件如下:
192.168.0.1 www.abc.com
并保存為hosts 文件。
步驟二 讀取Cookie 信息:
將用來讀取Cookie 的頁面?zhèn)鱳ww.def.com ,此時(shí)連www.abc.com ,由于我們進(jìn)行本機(jī)DNS 域名解析的修改,這時(shí)網(wǎng)絡(luò)連接的并不www.abc.com ,而www.def.com 。
這www.abc.com 設(shè)在本地的Cookie 便可被讀出。
步驟三 同樣道理,你可對(duì)讀出的數(shù)據(jù)進(jìn)行修改,并可將修改后的信息寫入Cookie 中。修改完畢后,刪掉hosts 文件,再重新進(jìn)www.abc.com ,此時(shí)所使用的Cookie 數(shù)據(jù)就是你制定的數(shù)據(jù)。
總之,在某種程度上雖然可以實(shí)現(xiàn)Cookie 的欺騙,給網(wǎng)絡(luò)應(yīng)用帶來不安全的因素,但Cookie 文件本身并不會(huì)造成用戶隱私的泄露,也不會(huì)給黑客提供木馬程序的載體,只要合理使用,它們會(huì)給網(wǎng)站管理員進(jìn)行網(wǎng)站的維護(hù)和管理以及廣大用戶的使用都帶來便利。
,Cookie 集合具有以下幾種屬性:
1.Expires 屬性:此屬性用來給Cookie 設(shè)置一個(gè)期限,在期限內(nèi)只要打開網(wǎng)頁就可以調(diào)用被保存的Cookie ,如果過了此期限Cookie 就自動(dòng)被刪除。如: 設(shè)定Cookie 的有效期到2004年4月1日,到時(shí)將自動(dòng)刪除。如果一個(gè)Cookie 沒有設(shè)定有效期,則其生命周期從打開瀏覽器開始,到關(guān)閉瀏覽器結(jié)束,每次運(yùn)行后生命周期將結(jié)束,下次運(yùn)行將重新開始。
2.Domain 屬性:這個(gè)屬性定義了Cookie 傳送數(shù)據(jù)的唯一性。若只將某Cookie 傳送給搜狐主頁時(shí),則可使用如下代碼:
3.Path 屬性:定義了Cookie 只發(fā)給指定的路徑請(qǐng)求,如果Path 屬性沒有被設(shè)置,則使用應(yīng)用軟件的缺省路徑。
4.Srcure 屬性:指定Cookie 能否被用戶讀取。
5.Haskeys 屬性:如果所請(qǐng)求的Cookie 是一個(gè)具有多個(gè)鍵值的Cookie 字典,則返回True ,它是一個(gè)只讀屬性。