<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-26  評論-111  文章-19  trackbacks-0

    一、Java中安全策略的概念
    ----Java應(yīng)用程序環(huán)境的安全策略,詳細說明了對于不同的代碼所擁有的不同資源的許可,它由一個Policy對象來表達。為了讓applet(或者運行在 SecurityManager下的一個應(yīng)用程序)能夠執(zhí)行受保護的行為,例如讀寫文件,applet(或 Java應(yīng)用程序)必須獲得那項操作的許可,安全策略文件就是用來實現(xiàn)這些許可。
    ----Policy對象可能有多個實體,雖然任何時候只能有一個起作用。當(dāng)前安裝的Policy對象,在程序中可以通過調(diào)用getPolicy方法得到,也可以通過調(diào)用setPolicy方法改變。Policy對象評估整個策略,返回一個適當(dāng)?shù)腜ermissions對象,詳細說明哪些代碼可以訪問哪些資源。

    ---- 策略文件可以儲存在無格式的ASCII文件或Policy類的二進制文件或數(shù)據(jù)庫中。本文僅討論無格式的ASCII文件的形式。

    二、Policy文件的格式
    ----為了能夠更好地理解下面的內(nèi)容,建議在閱讀時參照 \jdk1.2\jre\lib\security\java.policy文件和\jdk1.2\jre\lib\security\java.security文件的內(nèi)容。
    ----Policy文件的語法格式與說明

    ----一個Policy文件實質(zhì)上是一個記錄列表,它可能含有一個 “keystore”記錄,以及含有零個或多個“grant”記錄。其格式如下:

    keystore “some_keystore_url", “keystore_type";

    grant [ SignedBy “signer_names" ] [ , CodeBase “URL" ] {
    Permission permission_class_name [ “target_name" ]
    [ , “action"] [, SignedBy “signer_names" ];
    Permission ...
    };

    ----(1)“keystore"記錄

    ----一個keystore是一個私有密鑰(private keys)數(shù)據(jù)庫和相應(yīng)的數(shù)字簽名,例如X.509證書。Policy文件中可能只有一條keystore記錄(也可能不含有該記錄),它可以出現(xiàn)在文件中g(shù)rant記錄以外的任何地方。Policy配置文件中指定的 keystores用于尋找grant記錄中指定的、簽名者的公共密鑰(public keys),如果任何grant 記錄指定簽名者(signer_names),那么,keystore記錄必須出現(xiàn)在policy配置文件中。

    ----“some_keystore_url"是指keystore的URL位置, “keystore_type"是指keystore的類型。第二個選項是可選項,如果沒有指定,該類型則假定由安全屬性文件(java.security)中的“keystore.type"屬性來確定。keystore類型定義了 keystore信息的存儲和數(shù)據(jù)格式,用于保護keystore中的私有密鑰和keystore完整性的算法。 Sun Microsystems支持的缺省類型為“JKS”。

    ---- (2)“grant"記錄

    ----在Policy文件中的每一個grant記錄含有一個CodeSource (一個指定的代碼)及其permission(許可)。

    ----Policy文件中的每一條grant記錄遵循下面的格式,以保留字“grant”開頭,表示一條新的記錄的開始,“Permission”是另一個保留字,在記錄中用來標(biāo)記一個新的許可的開始。每一個grant記錄授予一個指定的代碼(CodeBase)、一套許可(Permissions)。

    ----permission_class_name必須是一個合格并存在的類名,例如java.io.FilePermission,不能使用縮寫(例如,F(xiàn)ilePermission)。

    ----target_name用來指定目標(biāo)類的位置,action用于指定目標(biāo)類擁有的權(quán)限。

    ----target_name可以直接指定類名(可以是絕對或相對路徑)、目錄名,也可以是下面的通配符:

    directory/* 目錄下的所有文件
    * 當(dāng)前目錄的所有文件
    directory/- 目錄下的所有文件,包括子目錄
    - 當(dāng)前目錄下的所有文件,包括子目錄
    << ALL FILES >>文件系統(tǒng)中的所有文件

    ----對于java.io.FilePermission,action可以是:read, write, delete和execute。

    ----對于java.net.SocketPermission,action可以是:listen, accept,connect,read,write。

    ---- (3)Policy文件中的屬性擴展(Property Expansion)屬性擴展與shell中使用的變量擴展類似,它的格式為:
    “${some.property}"

    ----實際使用的例子為:
    permission java.io.FilePermission
    “${user.home}", “read";

    ----“${user.home}"的值為“d:\Project",因此,下面的語句和上面的語句是一樣的:
    permission java.io.FilePermission “d:\Project ", “read";

    三、實 例
    ----當(dāng)初始化Policy時,首先裝載系統(tǒng)Policy,然后再增加用戶Policy,如果兩者都不存在,則使用缺省的Policy,即原始的沙箱模型。
    ----系統(tǒng)Policy文件的缺省位置為:
    {java.home}/lib/security/java.policy (Solaris)
    {java.home}\lib\security\java.policy (Windows)

    ----用戶Policy文件的缺省位置為:
    {user.home}/.java.policy (Solaris)
    {user.home}\.java.policy (Windows)

    ----其實,在實際使用中,我們可能不會像上面介紹的那么復(fù)雜,特別是在不使用數(shù)字簽名時。這時,我們完全可以借鑒JDK 1.2提供給我們的現(xiàn)成的 \jdk1.2\jre\lib\security\java.policy文件,根據(jù)我們的需要做相應(yīng)的修改,本文就針對不使用數(shù)字簽名情況詳細說明安全策略文件的用法。

    ----下面,是一個完整的在Windows 95/98/NT下使用的.java.policy文件。在文件中,分別使用注釋的形式說明了每個“permission”記錄的用途。

    // For LanServerTalk.java and LanClientTalk.java

    grant {
    //對系統(tǒng)和用戶目錄“讀”的權(quán)限
    permission java.util.PropertyPermission “user.dir", “read";
    permission java.util.PropertyPermission “user.home", “read";
    permission java.util.PropertyPermission “java.home", “read";
    permission java.util.PropertyPermission “java.class.path", “read";
    permission java.util.PropertyPermission “user.name", “read";

    //對線程和線程組的操作權(quán)限
    permission java.lang.RuntimePermission “modifyThread";
    permission java.lang.RuntimePermission “modifyThreadGroup";

    //操作Socket端口的各種權(quán)限
    permission java.net.SocketPermission “-", “l(fā)isten";
    permission java.net.SocketPermission “-", “accept";
    permission java.net.SocketPermission “-", “connect";
    permission java.net.SocketPermission “-", “read";
    permission java.net.SocketPermission “-", “write";

    //讀寫文件的權(quán)限
    permission java.io.FilePermission “-", “read";
    permission java.io.FilePermission “-", “write";

    //退出系統(tǒng)的權(quán)限,例如System.exit(0)
    permission java.lang.RuntimePermission “exitVM";
    };

    四、.Java.policy文件的使用
    ---- 對于Windows 95/98/NT,使用.Java.policy文件的方法主要有下面兩種。
    ----1. 使用缺省目錄

    ---- 我們可以簡單地將編輯好的.Java.policy文件拷貝到 Windows 95/98/NT的HOME目錄,這時,所有的applet(或Java應(yīng)用程序)可能都擁有某些相同的權(quán)限,使用起來簡單,但不靈活(例如:對于Java.io.FilePermission ,其目標(biāo)類的 target_name必須使用絕對路徑),如果不是在企業(yè)內(nèi)部網(wǎng)中使用,還可能存在一定安全隱患。

    ---- 2. 在命令行中指定

    ---- 在命令行,如果我們希望傳遞一個Policy文件給 appletviewer,還可以使用“-J-Djava.security.policy"參數(shù)來指定policy的位置:

    appletviewer -J-Djava.security.policy=pURL myApplet

    ----pURL為Policy文件的位置。下面,是一個實際的例子,以當(dāng)前目錄的.java.policy文件所指定的安全策略運行當(dāng)前目錄的LanServerTalk.html(文件中裝載并運行LanServerTalk.Java):

    appletviewer -J-Djava.security.policy
    =.Java.policy LanServerTalk.html

    ----這種方法使用靈活,特別是作為一個軟件包在企業(yè)內(nèi)部網(wǎng)中發(fā)布時,安裝、設(shè)置和遷移軟件,基本無須修改Policy文件的內(nèi)容,使用起來相當(dāng)簡單,而且,安全許可的范圍控制較精細。

    摘自《計算機世界》
    posted on 2005-10-14 17:48 snoics 閱讀(470) 評論(0)  編輯  收藏 所屬分類: 它山之石
    主站蜘蛛池模板: 精品国产免费人成电影在线观看| 黄色片免费在线观看| 女人让男人免费桶爽30分钟| 91亚洲精品第一综合不卡播放| 久久精品私人影院免费看| 西西人体44rt高清亚洲| 国产成人久久AV免费| 亚洲电影中文字幕| 在线人成精品免费视频| 亚洲人成在久久综合网站| 免费毛片在线看片免费丝瓜视频| 亚洲av永久无码精品天堂久久| 全免费毛片在线播放| 亚洲色少妇熟女11p| 四虎永久免费网站免费观看| 一个人看的hd免费视频| 国产精品国产亚洲精品看不卡| 久久成人免费播放网站| 亚洲jjzzjjzz在线播放| 免费国产小视频在线观看| 国产免费黄色无码视频 | 亚洲毛片免费视频| 亚洲冬月枫中文字幕在线看| 成年在线网站免费观看无广告| 国产成人亚洲综合a∨| 亚洲美女又黄又爽在线观看| 久久精品一本到99热免费| 亚洲色欲啪啪久久WWW综合网| 亚洲国产V高清在线观看| 日韩精品免费在线视频| 亚洲人成自拍网站在线观看| 亚洲日韩在线第一页| 99在线在线视频免费视频观看| 亚洲高清有码中文字| 亚洲精品无码成人片久久| 久久笫一福利免费导航| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 日韩亚洲国产高清免费视频| 亚洲国产精品无码久久九九大片 | 日韩免费高清大片在线| 久久亚洲精品成人无码|