網絡技術是從1990年代中期發展起來的新技術,它把互聯網上分散的資源融為有機整體,實現資源的全面共享和有機協作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計算機、存儲資源、數據資源、信息資源、知識資源、專家資源、大型數據庫、網絡、傳感器等。 當前的互聯網只限于信息共享,網絡則被認為是互聯網發展的第三階段。 經常有讀者詢問,如何在其站點上使用JavaScript,以確保用戶登錄時的口令不會外泄。對于這樣的問題,我的第一反應就是告訴他們使用SSL(安全套接字協議層)。如使用正確,SSL對于安全要求較高的Web應用是最佳的解決方案。但是,也有相當一部分開發者,他們的Web應用對安全性的要求并不高,因此他們并不希望訪問者使用SSL 登錄。 Web應用一般使用一種叫做“會話狀態管理”(Session State Management) 的技術來追蹤和管理瀏覽器與服務器之間的相互活動。因為每個瀏覽器的瀏覽要求相對于其他瀏覽器都是獨立的(正如超文本傳輸協議中定義的那樣),所以Web 應用必然使用某些技巧,如Cookie、隱藏表格字段、或重寫URL,它們可以識別出服務器與某個瀏覽器進行的獨立會話。大多數的服務器端編程環境(如ASP、PHP、ColdFusion等)都使用Cookie。 會話狀態管理的問題在于從根本上講它是不安全的。這些被用來管理會話狀態的Cookie、表單值、或URL要在瀏覽器和服務器之間往來傳送,黑客可以在途中攔截它們。一旦攔截成功,黑客就可以利用這些信息強行接管用戶會話。 在大多數服務器端腳本編寫環境里,你都可以采取一些措施以減少此類泄密的發生。例如,你可以為Cookie設定很短的使用期限,應用“難預期會話狀態”信息。然而,最安全的解決方案還是使用SSL。使用SSL,不論用戶口令,還是會話狀態信息都會受到保護。 如果你不使用SSL,那么可以要求用戶對你的應用中的每個敏感頁進行重新認證。但是,從用戶的角度來講,這種方式未免太過麻煩。總之,你必須清楚你和你的用戶究竟愿意承擔多高的風險。如果口令泄露的風險過高,你就需要使用SSL建立應用。如果你不能使用SSL,可以采用基于MD5的登錄方式作為代替。它至少可以保護你的用戶的口令免于外泄。另外,再選用一種可以防止會話狀態信息被竊的服務器端腳本編寫技術。 通常,如果一個用戶不使用SSL登錄(即原來的HTTP),那么從離開瀏覽器直到到達目標網絡服務器的這段時間里,用戶口令都處于無保護的暴露狀態,正如下頁中的圖表所示。 不過,我們可以利用一種不可逆的函數開發一種登錄方案,利用這種方案就不會暴露用戶的口令。函數是集合的元素之間的一種對應關系,在從集合A到集合B的函數中,A中每個元素在B中都有一個唯一的元素與之相對應。不可逆函數在計算上很難逆轉——即給定集合B中的一個元素,很難確定在集合A中的哪個元素與之相對應。 這好比是一臺碎紙機。把文件放入碎紙機中銷毀是很容易的。但是反之,如果要把銷毀后的碎紙屑重新拼湊成原文可就難上加難了。 <B>采用MD5解決方案<B> 當今最流行的不可逆函數應用程序之一就是由Ronald Rivest開發的MD5算法。Ronald Rivest還是著名的RSA(Rivest,Shamir,Adelman)加密算法的開發者之一。MD5算法能為任何長度的信息生成一個16字節大小的“數字指紋”。這個信息可以是一個字符串、一個文件、一個文本流或任何其它形式的字節序列。在RFC1321中有MD5算法的詳細描述。 我們要開發一種使用MD5算法的登錄方式,用以保護從一個瀏覽器發送至網絡服務器的用戶口令。 當一名用戶對某個網絡應用提出登錄請求時,其網絡服務器就會提供給用戶一個登錄表格。這是一個帶有隨機生成值的表格。其中的隨機生成值由服務器端腳本從一個數億記的取值空間中隨機選取生成。 <img src="http://edu.chinaz.com/UpLoadFiles/NewsPhoto/esastep1.gif"> 用戶在登錄表格中輸入他或她的用戶名和口令,用戶端腳本給口令附加一個隨機值,然后用MD5不可逆算法對結果進行計算。再用計算得出的值代替原口令。我把這個值稱為MD5口令。 最后,用戶端腳本把用戶名和這個MD5口令發送到網絡服務器。因為在瀏覽器與服務器之間傳送的是MD5的運算結果,所以任何人都無法通過計算得出用戶所輸入的原始口令。 <img src="http://edu.chinaz.com/UpLoadFiles/NewsPhoto/esastep2.gif"> 網絡服務器在接收用戶名和MD5口令后,會執行與用戶瀏覽器相同的運算。它給用戶口令(從服務器的被保護區域中提取)附加上隨機值(即已發送給用戶的隨機值),并計算出正確的MD5口令值。然后網絡應用程序把這個值和它從瀏覽器收取的值相比較。如果兩值相等,網絡應用程序就會生成一個服務器端會話變量,證明此用戶身份正確。 <img src="http://edu.chinaz.com/UpLoadFiles/NewsPhoto/esastep3.gif"> 說到這里,你也許會置疑使用隨機值的必要性。其實,這個隨機值是用來防止再度攻擊的。如果只有原始用戶口令通過MD5,那么相應得出的MD5口令就會總是同一個值。黑客只要截獲MD5口令就同樣可以登錄進入網絡應用。使用了隨機值后,每次登錄時生成的MD5口令都是唯一的,這樣就避免了上述問題的出現。 <B>JavaScript實現</B> 在JavaScript中實現使用MD5加密的登錄方案是比較容易的。Paul Johnston 的站點為您提供了MD5算法實現的豐富資料。其它有關MD5的信息可以在此站點中找到。請將代碼 拷貝至一個文本文件,并命名為md5-js.txt。 我們將在ASP環境下完成服務器端的腳本編寫(因為ASP支持JScript——微軟版的JavaScript)。你可以使用任何一種服務器端腳本編寫語言,但是你必須把MD5算法翻譯成你所選擇的語言。 網絡的神奇作用吸引著越來越多的用戶加入其中,正因如此,網絡的承受能力也面臨著越來越嚴峻的考驗―從硬件上、軟件上、所用標準上......,各項技術都需要適時應勢,對應發展,這正是網絡迅速走向進步的催化劑。 |
溫馨提示:喜歡本站的話,請收藏一下本站!