天天看點

安全

自動下載下傳和通過網際網路運作程式聽起來就象是一個病毒制造者的夢想。在用戶端的程式設計中,ActiveX帶來了 最讓人頭痛的安全問題。點選一個 Web站點的時候,可能會随同HTML 網頁傳回任何數量的東西:GIF 檔案、 腳本代碼、編譯好的Java 代碼以及ActiveX 元件。有些是無害的;GIF檔案不會對我們造成任何危害,而腳 本編制語言通常在自己可做的事情上有着很大的限制。Java 也設計成在一個安全“沙箱”裡在它的程式片中 運作,這樣可防止操作位于沙箱以外的磁盤或者記憶體區域。 ActiveX是所有這些裡面最讓人擔心的。用 ActiveX編寫程式就象編制 Windows應用程式——可以做自己想 做的任何事情。下載下傳回一個ActiveX元件後,它完全可能對我們磁盤上的檔案造成破壞。當然,對那些下載下傳 回來并不限于在Web浏覽器内部運作的程式,它們同樣也可能破壞我們的系統。從 BBS下載下傳回來的病毒一直 是個大問題,但網際網路的速度使得這個問題變得更加複雜。 目前解決的辦法是“數字簽名”,代碼會得到權威機構的驗證,顯示出它的作者是誰。這一機制的基礎是認 為病毒之是以會傳播,是由于它的編制者匿名的緣故。是以假如去掉了匿名的因素,所有設計者都不得不為 它們的行為負責。這似乎是一個很好的主意,因為它使程式顯得更加正規。但我對它能消除惡意因素持懷疑 态度,因為假如一個程式便含有Bug,那麼同樣會造成問題。 Java 通過“沙箱”來防止這些問題的發生。Java 解釋器内嵌于我們本地的Web 浏覽器中,在程式片裝載時會 檢查所有有嫌疑的指令。特别地,程式片根本沒有權力将檔案寫進磁盤,或者删除檔案(這是病毒最喜歡做 的事情之一)。我們通常認為程式片是安全的。而且由于安全對于營建一套可靠的客戶機/伺服器系統至關 重要,是以會給病毒留下漏洞的所有錯誤都能很快得到修複(浏覽器軟體實際需要強行遵守這些安全規則; 而有些浏覽器則允許我們選擇不同的安全級别,防止對系統不同程度的通路)。 大家或許會懷疑這種限制是否會妨礙我們将檔案寫到本地磁盤。比如,我們有時需要建構一個本地資料庫,

41

或将資料儲存下來,以便日後離線使用。最早的版本似乎每個人都能線上做任何敏感的事情,但這很快就變 得非常不現實(盡管低價“網際網路工具”有一天可能會滿足大多數使用者的需要)。解決的方案是“簽了名的 程式片”,它用公共密鑰加密算法驗證程式片确實來自它所聲稱的地方。當然在通過驗證後,簽了名的一個 程式片仍然可以開始清除你的磁盤。但從理論上說,既然現在能夠找到建立人“算帳”,他們一般不會幹這 種蠢事。Java 1.1 為數字簽名提供了一個架構,在必要時,可讓一個程式片“走”到沙箱的外面來。 數字簽名遺漏了一個重要的問題,那就是人們在網際網路上移動的速度。如下載下傳回一個錯誤百出的程式,而它 很不幸地真的幹了某些蠢事,需要多久的時間才能發覺這一點呢?這也許是幾天,也可能幾周之後。發現了 之後,又如何追蹤當初肇事的程式呢(以及它當時的責任有多大)?