1. 程式人生 > >對java沙箱機制的一點了解

對java沙箱機制的一點了解

protected 加載 文件系統 and 介紹 cpu san 刪除 www.

1. 引入

我們都知道,程序員編寫一個Java程序,默認的情況下可以訪問該機器的任意資源,比如讀取,刪除一些文件或者網絡操作等。當你把程序部署到正式的服務器上,系統管理員要為服務器的安全承擔責任,那麽他可能不敢確定你的程序會不會訪問不該訪問的資源,為了消除潛在的安全隱患,他可能有兩種辦法:

1) 讓你的程序在一個限定權限的帳號下運行。

2) 利用Java的沙箱機制來限定你的程序不能為非作歹。以下用於介紹該機制。

2. 什麽是沙箱?

?Java安全模型的核心就是Java沙箱(sandbox),什麽是沙箱?沙箱是一個限制程序運行的環境。沙箱機制就是將 Java 代碼限定在虛擬機(JVM)特定的運行範圍中,並且嚴格限制代碼對本地系統資源訪問,通過這樣的措施來保證對代碼的有效隔離,防止對本地系統造成破壞。沙箱主要限制系統資源訪問,那系統資源包括什麽?——CPU、內存、文件系統、網絡。不同級別的沙箱對這些資源訪問的限制也可以不一樣。

?所有的Java程序運行都可以指定沙箱,可以定制安全策略。

3. java中的安全模型

?在Java中將執行程序分成本地代碼和遠程代碼兩種,本地代碼默認視為可信任的,而遠程代碼則被看作是不受信的。對於授信的本地代碼,可以訪問一切本地資源。而對於非授信的遠程代碼在早期的Java實現中,安全依賴於沙箱 (Sandbox) 機制。如下圖所示

技術分享圖片

但如此嚴格的安全機制也給程序的功能擴展帶來障礙,比如當用戶希望遠程代碼訪問本地系統的文件時候,就無法實現。因此在後續的 Java1.1 版本中,針對安全機制做了改進,增加了安全策略,允許用戶指定代碼對本地資源的訪問權限。如下圖所示

技術分享圖片

在 Java1.2 版本中,再次改進了安全機制,增加了代碼簽名。不論本地代碼或是遠程代碼,都會按照用戶的安全策略設定,由類加載器加載到虛擬機中權限不同的運行空間,來實現差異化的代碼執行權限控制。如下圖所示

技術分享圖片

當前最新的安全機制實現,則引入了域 (Domain) 的概念。虛擬機會把所有代碼加載到不同的系統域和應用域,系統域部分專門負責與關鍵資源進行交互,而各個應用域部分則通過系統域的部分代理來對各種需要的資源進行訪問。虛擬機中不同的受保護域 (Protected Domain),對應不一樣的權限 (Permission)。存在於不同域中的類文件就具有了當前域的全部權限,如下圖所示

技術分享圖片

以上提到的都是基本的 Java 安全模型概念,在應用開發中還有一些關於安全的復雜用法,其中最常用到的 API 就是 doPrivileged。doPrivileged 方法能夠使一段受信任代碼獲得更大的權限,甚至比調用它的應用程序還要多,可做到臨時訪問更多的資源。有時候這是非常必要的,可以應付一些特殊的應用場景。例如,應用程序可能無法直接訪問某些系統資源,但這樣的應用程序必須得到這些資源才能夠完成功能。

4. 啊

本文轉載並學習自https://www.cnblogs.com/MyStringIsNotNull/p/8268351.html

對java沙箱機制的一點了解