Java的沙箱機制

來源:互聯網
上載者:User

0 Java安全體系概述 
    從JDK 1.0開始Java就實現了一套安全架構,主要用於Applet. 在這種體系下Java Code的執行環境被嚴格劃分為兩個部分,本地代碼可以訪問電腦的所有資源,而遠端代碼(Romote Code: 主要是Applet)只能運行在嚴格限制的沙箱裡面.安全管理器(Security
Manager)作為一個子系統來決定哪些資源允許沙箱中的程式訪問. 
    JDK 1.1引入了"簽名Applet"的概念,一個被信任簽名的Applet被當作和本地代碼具有同等許可權,可以訪問全部的本地資源. 
    JDK 1.2做了很多改進.首先,無論本地代碼還是遠端代碼(remote code)現在都服從於安全性原則.安全性原則為各種簽名者和來源定義了一組許可(permission),可以由使用者和系統管理員來配置各種許可.每個許可(permission)指定允許訪問只用特定的資源,例如讀或寫一個特定的檔案/目錄或者可以串連到指定的地址和連接埠... 
    運行時系統將程式碼群組織為不同的域(domain),每個域對應一組許可,在這個域中的類的執行個體都受這個域指定的許可的限制. 
    
1. 控制你的Application 
首先要明確的是,本地應用程式啟動並執行時候,安全管理器(security manager)並沒有被安裝.所以,對於應用程式來說,預設是可以訪問所有的資源,這一點和Applet不同.要啟動安全管理器就是在啟動命令列加上 -Djava.security.manager.預設載入的系統策略檔案授予了所有代碼訪問一些通用屬性的許可.這個檔案是${jre_home}\lib\security\java.policy.在命令列上給定
-Djava.security.manager 啟動應用程式,系統會首先載入${jre_home}\lib\security\java.security 在這個檔案中搜尋policy.url可以看到如下的兩行 
policy.url.1=file:${java.home}/lib/security/java.policy 
policy.url.2=file:${user.home}/.java.policy 
在這兩行載入了預設的策略檔案,我們也可以編輯自己的策略檔案然後添加到java.security中使應用程式應用我們的安全性原則.除此以外還有另一種指定我們自己的安全性原則檔案的方法,就是在命令列上使用 -Djava.security.policy=mypolicy 選項. 
    如果熟悉策略檔案的文法,可以自己用文字編輯器編輯,推薦使用工具policytool,這是jre提供的一個專門用來編輯策略檔案的工具. 
    
2. 可信(Secure)代碼和分頁檔需要使用的API和工具 
    為了保證代碼的安全性,需要確定代碼或檔案的來源,需要提供者進行數位簽章.可以使用keytool或者security API來產生公開金鑰/私密金鑰對.為了驗證公開金鑰的確來自發行者,需要數位憑證(certificate),數位憑證由被信任的第三方提供.公開金鑰/私密金鑰對和憑證存放區在一個密碼保護的資料庫裡,叫做keystores. 
    
2.1 對程式碼簽署並賦予許可 
2.2 分頁檔 
2.3 產生和校正簽名 

3. 實現你自己的許可 
    本節中有一個例子,參見http://java.sun.com/docs/books/tutorial/security1.2/userperm/index.html 
    在代碼中檢查是否具有某種許可: 
    1. 調用System.getSecurityManager()來得到當前安裝的security manager. 
    2. 如果返回結果不為null,可以進一步查詢是否具有需要的許可.java.security.AccessController有個方法叫做doPrivileged,可以臨時的提高某種許可權來獲得特定資源的訪問許可,從而可以將對於特定資源的訪問限定在某個類,並不對整個應用放開,只有調用特定的類才能訪問特定的資源,詳見New
Privileged Block API相關文檔. 
    3. java.security.Permission和java.security.BasePermission這兩個類對於控制資源存取權限很重要.java.security.SecurityManager的方法checkPermission()接受的參數就是Permission極其子類.具體參見Java文檔的java.security包部分. 
    4. 這個例子最後還詳細描述了三個角色(架構開發人員,資源訪問類開發人員和使用者)需要做的事情. 
    
參考文獻: http://java.sun.com/docs/books/tutorial/security1.2/TOC.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.