GB | BIG5
|
| 首頁 > 安全技術 > 程序 > 正文 |
 |
| Java 的安全性 |
| 本文出自:http://www.cert.org.tw 作者: (2001-11-01 07:00:00) |
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 上
最新的安全動態和安全工具更是要隨時留意。
Java Security 相關的 FAQ ?
請參考底下網頁:
http://java.sun.com/docs/books/tutorial/applet/security/capabilities.html
http://java.sun.com/sfaq/index.html
http://java.sun.com/products/jdk/1.1/docs/guide/security/
(http://www.fanqiang.com)
進入【UNIX論壇】
|
|
| 相關文章 |
|
|
|
|
 |
★ 樊強制作 歡迎分享 ★ |