(電子商務研究中心訊) Cookie,有時也用其復數(shù)形式Cookies,指某些網(wǎng)站為了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密)。定義于RFC2109(已廢棄),最新取代的規(guī)范是RFC2965。
基本信息
Cookie最早是網(wǎng)景公司的前雇員Lou Montulli在1993年3月的發(fā)明。Cookie是由服務器端生成,發(fā)送給User-Agent(一般是瀏覽器),瀏覽器會將Cookie的key/value保存到某個目錄下的文本文件內(nèi),下次請求同一網(wǎng)站時就發(fā)送該Cookie給服務器(前提是瀏覽器設置為啟用cookie)。Cookie名稱和值可以由服務器端開發(fā)自己定義,對于JSP而言也可以直接寫入jsessionid,這樣服務器可以知道該用戶是否合法用戶以及是否需要重新登錄等。
主要用途
服務器可以利用Cookies包含信息的任意性來篩選并經(jīng)常性維護這些信息,以判斷在HTTP傳輸中的狀態(tài)。Cookies最典型的應用是判定注冊用戶是否已經(jīng)登錄網(wǎng)站,用戶可能會得到提示,是否在下一次進入此網(wǎng)站時保留用戶信息以便簡化登錄手續(xù),這些都是Cookies的功用。另一個重要應用場合是“購物車”之類處理。用戶可能會在一段時間內(nèi)在同一家網(wǎng)站的不同頁面中選擇不同的商品,這些信息都會寫入Cookies,以便在最后付款時提取信息。
生存周期
Cookie可以保持登錄信息到用戶下次與服務器的會話,換句話說,下次訪問同一網(wǎng)站時,用戶會發(fā)現(xiàn)不必輸入用戶名和密碼就已經(jīng)登錄了(當然,不排除用戶手工刪除Cookie)。而還有一些Cookie在用戶退出會話的時候就被刪除了,這樣可以有效保護個人隱私。Cookie在生成時就會被指定一個Expire值,這就是Cookie的生存周期,在這個周期內(nèi)Cookie有效,超出周期Cookie就會被清除。有些頁面將Cookie的生存周期設置為“0”或負值,這樣在關閉瀏覽器時,就馬上清除Cookie,不會記錄用戶信息,更加安全。
識別功能
如果在一臺計算機中安裝多個瀏覽器,每個瀏覽器都會在各自獨立的空間存放cookie。因為cookie中不但可以確認用戶,還能包含計算機和瀏覽器的信息,所以一個用戶用不同的瀏覽器登錄或者用不同的計算機登錄,都會得到不同的cookie信息,另一方面,對于在同一臺計算機上使用同一瀏覽器的多用戶群,cookie不會區(qū)分他們的身份,除非他們使用不同的用戶名登錄。
反對cookies者
一些人反對cookie在網(wǎng)絡中的應用,他們的理由如下:
1、識別不精確
2、隱私,安全和廣告
Cookies在某種程度上說已經(jīng)嚴重危及用戶的隱私和安全。其中的一種方法是:一些公司的高層人員為了某種目的(譬如市場調(diào)研)而訪問了從未去過的網(wǎng)站(通過搜索引擎查到的),而這些網(wǎng)站包含了一種叫做網(wǎng)頁臭蟲的圖片,該圖片透明,且只有一個像素大小(以便隱藏),它們的作用是將所有訪問過此頁面的計算機寫入cookie。而后,電子商務網(wǎng)站將讀取這些cookie信息,并尋找寫入這些cookie的網(wǎng)站,隨即發(fā)送包含了針對這個網(wǎng)站的相關產(chǎn)品廣告的垃圾郵件給這些高級人員。
因為更具有針對性,使得這套系統(tǒng)行之有效,收到郵件的客戶或多或少表現(xiàn)出對產(chǎn)品的興趣。這些站點一旦寫入cookie并使其運作,就可以從電子商務網(wǎng)站那里獲得報酬,以維系網(wǎng)站的生存。
鑒于隱藏的危害性,瑞典已經(jīng)通過對cookie立法,要求利用cookie的網(wǎng)站必須說明cookie的屬性,并且指導用戶如何禁用cookie。
腳本攻擊
盡管cookie沒有病毒那么危險,但它仍包含了一些敏感信息:用戶名,計算機名,使用的瀏覽器和曾經(jīng)訪問的網(wǎng)站。用戶不希望這些內(nèi)容泄漏出去,尤其是當其中還包含有私人信息的時候。
這并非危言聳聽,一種名為跨站點腳本攻擊(Cross site scripting)可以達到此目的。通??缯军c腳本攻擊往往利用網(wǎng)站漏洞在網(wǎng)站頁面中植入腳本代碼或網(wǎng)站頁面引用第三方法腳本代碼,均存在跨站點腳本攻擊的可能,在受到跨站點腳本攻擊時,腳本指令將會讀取當前站點的所有Cookie內(nèi)容(已不存在Cookie作用域限制),然后通過某種方式將Cookie內(nèi)容提交到指定的服務器(如:AJAX)。一旦Cookie落入攻擊者手中,它將會重現(xiàn)其價值。
建議開發(fā)人員在向客戶端Cookie輸出敏感的內(nèi)容時(譬如:該內(nèi)容能識別用戶身份):
1)設置該Cookie不能被腳本讀取,這樣在一定程度上解決上述問題。
2)對Cookie內(nèi)容進行加密,在加密前嵌入時間戳,保證每次加密后的密文都不一樣(并且可以防止消息重放)。
3)客戶端請求時,每次或定時更新Cookie內(nèi)容(即:基于第2小條,重新加密)
4)每次向Cookie寫入時間戳,數(shù)據(jù)庫需要記錄最后一次時間戳(防止Cookie篡改,或重放攻擊)。
5)客戶端提交Cookie時,先解密然后校驗時間戳,時間戳若小于數(shù)據(jù)數(shù)據(jù)庫中記錄,即意味發(fā)生攻擊。
基于上述建議,即使Cookie被竊取,卻因Cookie被隨機更新,且內(nèi)容無規(guī)律性,攻擊者無法加以利用。另外利用了時間戳另一大好處就是防止Cookie篡改或重放。Cookie竊?。核鸭脩鬰ookie并發(fā)給攻擊者的黑客。攻擊者將利用cookie信息通過合法手段進入用戶帳戶。
Cookie篡改:利用安全機制,攻擊者加入代碼從而改寫Cookie內(nèi)容,以便持續(xù)攻擊。 (編選:網(wǎng)經(jīng)社)