Cookie-天使還是惡魔?
HTTP是一種無(wú)狀態(tài)的協(xié)議-Web服務(wù)器不必保持與過(guò)去或者將來(lái)請(qǐng)求的任何信息。當(dāng)一個(gè)Http請(qǐng)求到達(dá)服務(wù)器后,服務(wù)器總是這樣認(rèn)為的:"這小子,新來(lái)的!",但是服務(wù)器有沒(méi)有理由保持用戶的會(huì)話狀態(tài)呢?當(dāng)然有。例如,在對(duì)訪問(wèn)的授權(quán)中,服務(wù)器就不得不記住這些來(lái)歷不明的壞小子么。通過(guò)什么手段能達(dá)到這樣的目的呢?最為人熟悉的解決方案就是Cookie.下面我們就談?wù)凜ookie的工作原理和利弊.
1.Cookie的定義
Cookie是一種在HTTP中對(duì)狀態(tài)進(jìn)行管理的方式。它是一種少量的狀態(tài)數(shù)據(jù),由We站點(diǎn)服務(wù)器發(fā)送給瀏覽器,并代表服務(wù)器存儲(chǔ)在用戶的機(jī)器上。
2.使用Cookie的動(dòng)機(jī)
服務(wù)器隨其響應(yīng)向?yàn)g覽器發(fā)送一個(gè)Cookie,請(qǐng)求瀏覽器在隨后的請(qǐng)求中包含此Cookie,采用這種方式,Web服務(wù)器就能在會(huì)話中跟蹤用戶。Cookie中的消息可能是唯一的,這樣便可以單獨(dú)的跟蹤特定的用戶,也可能是剪輯,使得服務(wù)器能夠統(tǒng)一跟蹤來(lái)自一家單位的所有用戶。
3.Cookie在瀏覽器中的使用
下圖顯示了Cookie在瀏覽器中的使用過(guò)程,
客戶機(jī)將請(qǐng)求發(fā)送給原始服務(wù)器,原始服務(wù)器在其響應(yīng)中包含一個(gè)含有Cookie值得標(biāo)頭(Set-Cookie),在未來(lái)所有對(duì)該服務(wù)器的請(qǐng)求中,客戶端都會(huì)包含Cookie。注意在客戶端存儲(chǔ)Cookie的時(shí)候,并不對(duì)Cookie字符串(XYZ)進(jìn)行任何的解釋。服務(wù)器可以依據(jù)生成請(qǐng)求的客戶端,相應(yīng)對(duì)的剪輯字符串進(jìn)行構(gòu)造,并更改用于構(gòu)造Cookie字符串的機(jī)制。該圖也可以表明進(jìn)行Cookie交互的時(shí)候,無(wú)須用戶的參與,除非事先要求每當(dāng)Cookie發(fā)出時(shí),便向用戶進(jìn)行通知。這也就在意定程度上對(duì)用戶的隱私造成了威脅。
當(dāng)用戶瀏覽器接受到Cookie之后,起初是存放于瀏覽器的內(nèi)存中,當(dāng)瀏覽器退出的時(shí)候,會(huì)以磁盤文件的形式寫入穩(wěn)定存儲(chǔ)器中。在這個(gè)過(guò)程中有一定的規(guī)則,如果Cookie具有的超時(shí)時(shí)間設(shè)定大于當(dāng)前瀏覽器退出時(shí)間,Cookie會(huì)存儲(chǔ),如果不大于,就不必要存儲(chǔ),這就是有人說(shuō)的設(shè)置了超時(shí)的Cookie會(huì)存儲(chǔ),而沒(méi)有設(shè)置的Cookie只用于瀏覽器會(huì)話。Cookie最多4KB的長(zhǎng)度,對(duì)于單獨(dú)的瀏覽器來(lái)說(shuō),它為每個(gè)服務(wù)器或者域提供最多20個(gè)Cookie,總共可提供300個(gè)Cookie。
4.Cookie的隱私問(wèn)題
Cookie得到了廣泛的應(yīng)用,但同時(shí)被懷疑會(huì)引起對(duì)個(gè)人隱私的侵犯。開始的時(shí)候,如果瀏覽器設(shè)定允許Cookie,許多的用戶甚至不知道他們?cè)诎l(fā)送Cookie,Cookie用明文發(fā)送,而且用Http嗅探工具,也能很簡(jiǎn)單的探到Cookie信息 ,而數(shù)據(jù)包在網(wǎng)絡(luò)中傳輸?shù)臅r(shí)候,Cookie的信息也能夠被別有用心的人修改。另外,由于服務(wù)器可能使用Cookie的一部分作為后端數(shù)據(jù)庫(kù)的索引,如果對(duì)Cookie進(jìn)行了修改,會(huì)造成數(shù)據(jù)庫(kù)中同用戶無(wú)關(guān)的那部分?jǐn)?shù)據(jù)出現(xiàn)不為人知的改動(dòng)。許多的用戶不知道誰(shuí)有他們的Cookie的訪問(wèn)權(quán)以及對(duì)Cookie信息作了些什么,例如Cookie可以在公司間共享,這樣就可以被別有用心的非法出售 .
為了證明上述說(shuō)法,我做了一個(gè)簡(jiǎn)單的測(cè)試程序,然后用HttpWatch這款Http嗅探工具,進(jìn)行嗅探 從圖中可以看出 ,能很容易的獲得Cookie的值,當(dāng)然如果是用戶自己,那無(wú)所謂了,但是一些木馬,病毒如果也能夠獲得,那就泄露了用戶的隱私。
此外,Cookie信息由原始服務(wù)器不同的另一個(gè)服務(wù)器進(jìn)行傳遞,問(wèn)題就會(huì)變得更加嚴(yán)重。比如有這樣一種情形,用戶訪問(wèn)門戶站點(diǎn)A,網(wǎng)址:www.a.com,A網(wǎng)站要收集用戶的信息可以通過(guò)以下方式,設(shè)置一個(gè)專門用于收集信息的站點(diǎn)s.a.com,比如訪問(wèn)www.a.com/1.aspx,站點(diǎn)A首先將該請(qǐng)求重定向到s.a.com,形成這樣的請(qǐng)求 s.a.com/count.aspx?return=www.a.com/1.aspx,這樣的話,s.a.com就可以將cookie的信息收集起來(lái),然后再重定向給www.a.com/1.aspx,但用戶并不知道有這么一個(gè)繁瑣的過(guò)程。就像一個(gè)人司機(jī)接受交警檢查,司機(jī)出示了駕駛證,交警可能將該駕駛證傳遞給其他人看,然后再交回司機(jī)手里一樣,這樣司機(jī)的隱私信息就有更大的風(fēng)險(xiǎn)被曝漏。如圖:
對(duì)于服務(wù)器而言,Cookie也可能是危險(xiǎn)的,比如站點(diǎn)A是一個(gè)聯(lián)盟,他下面有類似于代理的用戶,并且分級(jí)別,比如代理A,代理B都屬于1級(jí)代理,1級(jí)代理下面有相應(yīng)的子代理,那么很可能代理A就可以偷窺到代理B的子代理信息,如果服務(wù)端權(quán)限系統(tǒng)不完善的話,用戶A可以仿造一個(gè)代理B的標(biāo)識(shí),利用自己是一級(jí)代理的身份繞過(guò)一些系統(tǒng)驗(yàn)證,在系統(tǒng)疏忽后者漏洞出冒充代理B。造成對(duì)服務(wù)器和其他用戶的威脅。
Cookie無(wú)疑在web世界中充當(dāng)了天使,它能夠使本來(lái)沒(méi)有狀態(tài)的HTTP的記性變好,但同時(shí)在對(duì)用戶隱私保證和對(duì)服務(wù)器潛在威脅上,它可以說(shuō)是一個(gè)惡魔。
使用Cookie的時(shí)候一定要注意這樣的問(wèn)題是Cookie是保存在客戶端的,服務(wù)端這樣是刪除不了Cookie的,見一哥們這樣使用,Response.Cookies.Remove(Response.Cookies[0]);正確使Cookie過(guò)期的方式向客戶端發(fā)送一個(gè)過(guò)期的同名Cookie即可
作者:jillzhang
出處:http://jillzhang.cnblogs.com/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
出處:http://jillzhang.cnblogs.com/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。

浙公網(wǎng)安備 33010602011771號(hào)