談Java的安全機制

        Java 電腦語言在全球資訊網上的崛起,又使得在 Internet 上做生意的安全情況有了另外一個截然不同的注視焦點。在沒有像 Java 這種電腦語言來寫Internet 上的應用程式之前,全球資訊網上的交易主要是靠 HTML 之中的表格來進行的。

        在使用這種表格填上信用卡的號碼去購物之前,比較謹慎的瀏覽器都會提出一個不安全的警告信號,這主要是因爲所有用 HTML 表格所傳送的資料,在網路上都是以明碼傳輸的,這些明碼很容易被人盜取來做非法的用途。

        用 Java 電腦語言所寫成的 applet 可以做出比 HTML 表格還要雜上幾百倍的資料處理工作,例如將使用者輸入的重要資料轉變成非常不易破解的密碼以後,再交到Internet 的網路上傳遞,使宵小就算是盜取到了資料,也只是一堆無法識讀的亂碼而已,不能用來爲非作歹。除此之外,Java 電腦語言能讓 Internet 上的運算模式接近企業的主從運算環境,而且它又有不受客戶端作業系統平臺限制等的種種優點,這些長處使得 Java 變成最熱門的電腦語言。

        一個讓 Java 能如此受歡迎的主要原因之一是它的 secure (安全性). 簡單的說來,就是訪客不能夠寫任何資料進你網站上的 Java Applet 檔, 無法由你的網站透過 Java Applet 進入你的主機刪除你的檔案; 甚或是偷到主機上客戶的信用卡號碼.Java 是用 sandbox 的概念管理這些事情. 當 Java Applet 被限制在 sandbox 裏執行時, 有一些事情是 Java Applet 無法透過瀏覽器來處理的. 例如 Java Applet 不能讀,寫, 刪除以及更改主機內的檔案名稱. 它們也不能產生檔案,也無法檢查某個名稱是檔案名稱或是檔案夾名稱.

Java 在安全上的層層防範

        Java 電腦語言的設計人員深知安全問題是上 Internet 的最大隱憂,因此在設計這個要在全球資訊網上運作的語言時,就將層層地安全保護措施放到 Java 之中,以免程式設計師在用 Java 去開發全球資訊網上的程式應用時,有意、無意、故意或惡意地破壞了客戶端電腦環境的安全,同時也要防止宵小利用 Java 的 Applet 來胡作非爲。

這些層層的安全保護措施可以分成四層:

        第一層確定 Java 電腦語言簡單安全;

        第二層確認所載入要執行的程式正確;

        第三層確保Applet執行時的行爲規矩;

        最後一層則確切保護客戶端執行環境的安全。

        在電腦語言方面,Java 把令程式設計師頭痛的 pointer 運算刪除了;很多可以用不同方法去達成的工作簡化成只能用一種方式來做。程式設計師固然少了一些可以用來耀朋儕的特殊程式寫作方法,但同時也減少了程式設計師因語言的難度而犯錯誤的機會。在程式編譯的時候,Java 的程式編譯器會將一些在語法上不安全的錯誤抓出來,以確保原始程式碼不違反安全的守則。

        Java 的程式是先編譯成位元碼(bytecode),然後再下載到客戶端的電腦上解譯執行的。爲了要確定所欲執行的程式的確是經過 Java 的編譯器所編譯出來的,而且要確保這些要被執行的 Applet 沒有被人動過手腳,因此在程式解譯執行之前,都要先經過一番檢查確認的手續,在所有的程式碼都被仔細地檢查過以後,纔開始執行程式的運算工作。

        在程式開始執行以後,Java 的解譯器也是步步爲營地防止 Applet 程式有出軌的行爲,例如運算矩陣時超出事先預定的矩陣圍,或是要越界去擷取其他物件中的資料等不軌的行爲,都會產生執行時的錯誤信號,並馬上中止程式的運轉。而且從不同地方所載入的類別程式分存放在不同的名字隔間之中,不會和原始的類別程式混淆不清。

        Applet在客戶端的電腦上執行時,除非事先經過組態配置的設定,它是不允許去更動客戶端的電腦環境和檔案的,它也不容許Applet去讀取客戶端的檔案資料,更不能執行客戶端的現有程式。Applet 只能和自己的 Web 伺服器互通訊息,而不能任意地和網路上的其他電腦互通款曲。這些嚴格地限制是要確保從遠方來的 Applet 在執行時,不會對客戶端的電腦造成傷害,也不會將電腦病毒傳播進來。

        由於 Java 編程語言本質上是面向對像的,因此我們確信開發人員將會從一套對像級保護機制中獲益,這套對像級保護機制:(1) 超越了 Java 編程語言提供的固有保護,(2) 補充了基於線程的訪問控制機制。一個可能有用但現在尚未實現的概念是“子域”。子域是包含在另一域中的域。子域的權限或特權不會比將其作爲元件的域所擁有的更多。例如,可以創建域來有選擇地進一步限制應用程式可以做的事情。通常認爲域支援繼承:除在有些情況下父域進一步顯式地限制了子域外,子域將自動繼承父域的安全屬性。如果引入了信任程式碼的概念,則通過適當的權利放大來放鬆子域是可能的。

        爲方便起見,我們可以認爲系統域是一個所有系統程式碼的大集合。但是,爲了更好地進行保護,系統程式碼應該在多個系統域中運行,其中每個域保護特定型態的資源,同時得到一套特殊權限。例如,如果文件系統程式碼和網路系統程式碼在不同的域中運行,其中前者沒有訪問網路資源的權限,而後者沒有訪問文件系統的權限,則一個系統域的錯誤或安全漏洞將被最大可能地限制在其圍之內。

        有時將許多權限放在一個組中並用簡稱來指稱它們較爲方便。例如,如果希望名爲“SuperPermission”的權限包括(並隱含)FilePermission("-", "read,write") 和SocketPermission("*", "connect,accept"),從技術上來說,可通過用 add(添加)方法添加所需權限來用屬性 Permissions 或相似的屬性來實現此超級權限。這種分組可以任意雜化。 爲理解當給出這樣的超極權限時實際上已授予哪些權限,需創建一個固定且已命名的權限類來代表靜態指定的權限組,或在策略文件中清楚地說明成員權限。

        其次,處理策略(文件)會更加雜,因爲分組權限可能需要擴展。此外,分組權限的嵌套進一步增加了雜度.道高一尺,魔高一丈?雖然 Java 在設計時已經放入了重重嚴密的關卡,但是在實務上是不可能把所有在安全上的漏洞完全杜絕的。例如,上述的第二層到第四層安全防護措施主要是靠在客戶端瀏覽器下面執行 Java Applet 的虛擬機器(JVM)和 Java 的一些基本的類別程式庫來把守的,如果採用被人動過手腳的瀏覽器,則這些 Java 的層層客戶端安全措施就很可能無法發揮效用了。

        最近Internet 上管理安全的幾個單位就發出兩則和 Java 有關的安全警告:其一是電腦駭客(hacker)可以透過 Applet 並利用一些在 TCP/IP 及目錄服務(NDS)上的弱點,繞過 Internet 的防火牆;另一則是透過 Java 的組態改變,駭客可以把類別程式像伏兵一樣地預藏在客戶端的電腦中,以便日後開門揖盜。雖然這兩個漏洞已被新版本的 NetScape 和新版本的 Java 開發工具箱(JDK)將它們堵塞起來了,但是這也展示了 Java 不能完全阻擋無孔不入的駭客和宵小的侵襲。除此之外,一些傳統上電腦安全的漏洞,Java 也是無法加以防的:例如駭客可以用試錯的方法去破解電腦使用者的密碼;或是利用類似木馬屠城的手法,騙取電腦使用者信用卡號碼之類的機密資料等等,都不是任何一個電腦語言可以防的。對於全球資訊網上的用戶而言,如欲在網路上購物時,一定要本着「防人之心不可無的心情,小心謹慎地處理自己的機密資料,以免被歹徒盜用。對欲在 Internet 上安心做生意的公司而言,在電腦安全上還是有很長的一段路要走的,在 Internet 上最新的安全動態和安全工具更是要隨時留意。

發佈了20 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章