国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Weblet安全性教程

2019-11-18 15:13:15
字體:
來源:轉載
供稿:網友

內容:

一個安全性檢驗程序
沙箱的工作原理
擴展沙箱
結論
參考資料
關于作者
對本文的評價

相關內容:

控制 DOM,第 1 部分
控制 DOM,第 2 部分
更多的 dW java 參考資料

Weblet 安全性教程
Paul Everett (everettp@us.ibm.com)
軟件工程師,IBM

Weblet 是運行在瀏覽器中的 Java 程序,使用 DirectDOM 來直接操作被顯示的文檔。就像大多數基于 Web 的程序一樣,假如對 Weblet 治理不當,就會對系統安全造成威脅。幸好,Weblet 附帶的 Java 沙箱(Java Sandbox)可提高系統的內建安全性。在這個關于 DirectDOM 和基于 Weblet 開發的三部系列的最后一部分,Paul Everett 說明了如何使用沙箱來達到最佳效果。通過簡單的工作示例,Paul 演示了 Weblet 在缺省情況下能做什么和不能做什么,還說明了在需要的情況下如何回避沙箱的約束。請加入 討論論壇與本文作者和其他讀者交流您對這篇文章的心得。
您大概已經對 Applet 沙箱比較熟悉。Applet 與 Weblet 一樣是在瀏覽器中運行的 Java 小程序。它們經常是從未知系統不知不覺地載入您的機器,所以必須保證它們是絕對安全的。缺省情況下,Applet 沙箱是應用到 Applet 的一套限制和許可。沙箱可以保護用戶和客戶機系統不受低質量程序或惡意 Applet 的侵害。

假如您已經開發過 Applet,那么實現 Weblet 安全性對您來說應該是很直觀的。Weblet 與 Applet 有同樣的安全隱患,也需要同樣的保護。事實上,Weblet 和 Applet 甚至使用同樣的沙箱。缺省情況下 Weblet 沙箱禁止 Weblet 執行下列有潛在危險的活動:

讀文件或寫文件
啟動其它的程序
讀取某個系統屬性
關閉 JVM
打印
訪問當前 Java 安全策略
通過套接字或 URL 連接服務器而非主機

與 Applet 一樣,Weblet 可以在它們的沙箱中非常自由地運行,所以您可以使用它做許多工作,而無需受安全性的約束。在本文中,我將向您說明缺省情況下 Weblet 沙箱是如何工作的,以及您如何在需要的情況下安全地擴展其參數。我們將使用一個示例開始探索 Weblet 安全性。

注重:本文所描述的 Weblet 安全性在寫這篇文章時已經在 DirectDOM 的 alphaWorks 版本中得到了實現,請閱讀有關文檔來查看新的變化和增強的功能(請參閱參考資料)。

SecurityOps:一個安全性檢驗程序
SecurityOps 是一個 Weblet,用來嘗試幾個安全性敏感的操作。我已經在下一章顯示了每一個操作(包括異常)的結果?,F在開始,可以在清單 1 中查看這個 Weblet 的 Html 文件。

現在,讓我們來看一下清單 2 中的 SecurityOps.java。注重:對于每一個操作都有一個 try/catch 子句和一個已命名的輸出區域。

假如編譯 SecurityOps.java,把生成的類放在 SecuritySamples.jar 文件中并載入 HTML 文件,輸出將會如清單 3 所示。

只有 2 個操作是成功的:讀取 os.name 系統屬性和連接到服務主機。稍后,我們將會知道為什么它們會成功。其它的操作都產生了一些不同的 accessControlException 異常。

沙箱的工作原理
Weblet 在執行時可以訪問自己所在的 jar 文件內部的類(在它的 HTML 文件的 WEBLET_CODEBASE <param> 標記中指定)。除此之外,對 Weblet 的安全性和訪問控制的治理還要考慮以下三種情況:

DirectDOM 插件調用 SecurityManager。
當運行獨立的 Java 程序時,它們通常會毫無限制地運行。假如您使用 -Djava.security.manager 參數調用 java,您的程序就會在 SecurityManager 的控制下運行。SecurityManager 會探測到那些可能不太安全可靠的操作并對之進行異常處理。同樣,DirectDOM“引擎”會使用 SecurityManager 啟動 JVM,這樣就實現了沙箱。請參閱參考資料,以獲取更多關于安全治理器和策略文件的信息。

java.policy 設置安全策略。
當 SecurityManager 在未經非凡配置的情況下運行時,所有的敏感操作都會產生一個異常;也就是說,所有這樣的操作都會被阻塞。假如您想許可一個程序執行這些操作,可以在 java.policy 中創建 grant 語句,SecurityManager 讀入該語句并強制執行。在下一章您會了解到如何通過對 java.policy 進行非凡配置來更改您的 Weblet 安全策略。

Weblet 能連接到它們的主機。
與 Applet 一樣,缺省情況下 Weblet 能連接到它的主機。與其它系統的連接會被堵塞,但是可以通過 java.policy 答應連接。在談到連接這個課題時,我們將對此做更多的討論。
擴展沙箱
在這一章我將向您顯示如何通過對 java.policy 文件進行非凡配置來啟用 SecurityOps weblet 中的附加操作。在對自己系統中的 java.policy 進行非凡配置時,您最好先學習 Java 2 平臺的安全性文檔(請參閱參考資料),并備份您的 java.policy 文件。

清單 4 顯示了 java.policy 示例文件的一部分。請仔細看一下,我們將在下面對它進行具體討論。

關于示例的注重事項
通過瀏覽這個 java.policy 文件,您會看到幾個 grant 語句(盡管最后幾句被注釋掉了)。每一個 grant 列出一個或多個將被授予一組非凡程序的許可。可通過命名一個 permission 類對這些許可進行定義,這個類是 java.security.Permission 的一個子類。各種 Java API 都提供 permission 類來治理對特定資源的訪問。例如:

java.net.SocketPermission 控制通過套接字對網絡的訪問。
java.util.PRopertyPermission 控制讀/寫系統屬性。
java.lang.RuntimePermission 控制運行時的行為,比如對打印作業進行排隊。

permission 類可能會需要 java.policy 中的一些參數;細節問題請參閱參考資料。

被授予許可的程序是通過“codebase”進行定義的,它本質上是一個 URL,Java 類通過它被載入。清單 4 中的第一個(也是最大的一個)grant 語句沒有定義 codebase,所以不管那些程序是從本地文件載入還是通過 Web 載入,列出的許可都被授予所有的程序。這個 grant 是從缺省 java.policy 中復制過來的,它定義了 Applet、Weblet 以及其它所有在 SecurityManager 控制下運行的類的缺省沙箱。

在這里添加許可要非常小心!

grant 語句授予“看”特定系統屬性的許可。例如,列出了 os.name,SecurityOps 就能載入該屬性。沒有列出的系統屬性就無法獲取,這就是為什么試圖載入 user.name 時會拋出一個異常。

附加許可
清單 4 顯示了三個 grant 語句,這些語句可以啟用這個 SecurityOps weblet 中的附加功能。由于它們被注釋掉了,所以示例程序初始在缺省的沙箱中運行。在所有這三種情況下,codebase 是由 SecuritySamples.jar 構成。前兩種情況適用于 jar 文件從本地磁盤載入的情況。假如把這兩句的注釋去掉并且對 codebase 進行非凡配置以適合您的安裝,您可以啟用 SecurityOps weblet 中的“print”和“connect”示例。例如,我的策略文件包含對本地 Weblet 的許可,如清單 5 所示。

清單 5. java.policy:本地 Weblet 的許可

// Enable printing, when loaded from a local file
grant codeBase "file:///e:/everett/article/SecuritySamples.jar" {
permission java.lang.RuntimePermission "queuePrintJob";
};

// Enable a network connection, when loaded from a local file
grant codeBase "file:///e:/everett/article/SecuritySamples.jar" {
permission java.net.SocketPermission "www.ibm.com", "connect,accept,resolve";
};

清單 6 顯示如何在 grant 語句中授予和清單 5 中相同的兩種許可;假如 jar 文件是從服務器載入的,您會用到這種類型的許可。

清單 6. java.policy:接受服務的 Weblet 許可

// Enable printing and connections, when served by a web server
grant codeBase "http://pwe.endicott.ibm.com/article/SecuritySamples.jar" {
permission java.net.SocketPermission "www.ibm.com",
"connect,accept,resolve";
permission java.lang.RuntimePermission "queuePrintJob";
};

當然,必須對 codebase 中定義的特定目錄或服務器進行非凡配置以適合您的安裝環境。

注重,當 codebase 被作為特定的 jar 文件定義時,grant 中的 codebase 可以被定義為下面幾種類型:

一個特定的 jar 文件(本地的或者接受服務的)
特定目錄中的 jar 文件
目錄樹中的 jar 文件
來自特定服務器的 jar 文件
帶有一個非凡電子簽名的 jar 文件

授予許可時最好是定義得盡可能明確。假如一個 Weblet 需要附加的許可,最好是把這個 Weblet 的類隔離到一個專門的 jar 文件中,然后只需對該 jar 文件授予那些許可即可。這樣可以減少無意負面影響的發生氣率(也即,為一個特定 Weblet 指定的特權不會被意外地授予其它的代碼)。

通過添加附加的許可,可以啟用 SecurityOps 中的許多操作。利用 java.policy 文件可以做許多工作,我們只是接觸了一些皮毛。有關更多信息,請參閱參考資料。

關于 SOCKS 代理的論題
如您所見,一個 Weblet 可以在缺省情況下連接到為之服務的服務器。另外,還可以通過對 java.policy 文件進行非凡配置,以授予 Weblet 連接其它系統的許可。到目前為止,Weblet 安全性與 Applet 安全性很相似。但是在這里要指出 Weblet 與 Applet 之間有一個很重要(而且很復雜)的差異。

假如您的瀏覽器被配置成通過 SOCKS 代理連接到其它的系統,那個代理將會破壞 Weblet 的建立連接的能力。在這樣的配置下,所有的連接實際上是連到 SOCKS 代理,此代理代表您建立連接并返回數據。例如,假如您想要連接到“my.home.server.com”,您會看到一個異常報告說您需要連接“ my.socks.proxy”的許可。這是很令人頭痛的,但是我們可以設法解決這個問題。

您可以授予您的 Weblet 連接到 SOCK 服務器的許可,但是,在授權的時候,應該仔細限制許可的范圍;也就是說,將 grant codebase 限制為僅需要這種許可的 Weblet??梢赃B接到 SOCKS 服務器的 Weblet,也可通過 URL 操作連接到其它的系統。所以,給予“所有人”連接 SOCKS 服務器的許可是一個安全隱患。只應該將這種許可授予那些您信任的“人”。清單 7 顯示了如何回避 SOCKS。

清單 7. java.policy:回避 SOCKS

// enable sample weblet connections in a SOCKS environment
grant codeBase "file:///e:/everett/article/SecuritySamples.jar" {
permission java.net.SocketPermission "my.socks.proxy", "resolve";
permission java.lang.RuntimePermission "readFileDescrpermission java.lang.RuntimePermission "writeFileDescriptor";
};

據說,將來的 JDK 將包含一個改進的 socket factory。這可能是 SOCKS 問題的真正解決方案;目前,我們只能小心(并仔細)地啟用 Weblet 以連接到 SOCKS 服務器。

結論
您已經看到了,DirectDOM 被很好的建立來幫助您治理系統的 Weblet 安全性。在本文中,我們已經逐步了解了 DirectDOM 的基本工作原理,如下所述:

在啟動時,DirectDOM 引擎調用 SecurityManager,使用 Java 平臺的安全性方法實現 Weblet 沙箱。

DirectDOM 動態地授予 Weblet 的類連接自己的 hosting server 的許可。

在缺省的沙箱中被授予的許可是由可應用的 java.policy 文件的內容來控制的。所以,同一個系統中的 Weblet 和 Applet 共享同一個沙箱。

記住這些設置,通過我已經提供的示例,以及 Java 安全性工作的基本知識(請參閱參考資料),您應該能夠開發安全可靠的 Weblet。練習您已經學過的東西 ? 記住僅在必需許可的時候才授予許可,僅對那些需要許可的 Weblet 類授予許可。

參考資料

請加入本文的 討論論壇。

請從 IBM alphaWorks 站點下載 DirectDOM 開發人員工具包。

請訪問 W3C 主頁(和這個系列前面的文章)學習更多關于文檔對象模型(Document Object Model)的知識。

這個系列的第 1 篇文章介紹了 DirectDOM 和基于 Weblet 的開發(developerWorks,2001 年 4 月)。

這個系列的第 2 篇文章通過三個基于代碼的簡單示例,從頭到尾介紹了一個組織和開發 Weblet 的實用方法(developerWorks,2001 年 6 月)。

IBM 紅皮書 Java 2 網絡安全很好地分析、歸納和詳述了這個難題。

Sun 的 Java 教程跟蹤:Java 2 SDK 1.2 中的安全性介紹了安全治理器、策略以及其它更多的內容。

DirectDOM 開發工具僅僅是 IBM 眾多可應用的開發工具包中的一個。您將會在 developerWorks 的 開發人員工具包指南中找到用于開發從 Applet 到
xml 的所有東西的工具包。

非凡是,您可能希望從 IBM alphaWorks 查閱 用于 Java 的 WBI 開發工具包,這是一個可編程代理,用于開發和運行 Web 上的中間件應用。與 DirectDOM 一樣,WBI 開發人員工具包使 Web 頁面個性化有了飛躍式的提高。

與 WBI Development Kit 相關的是 WebSphere Transcoding Publisher,一個服務器端的解決方案,為各種不同的數據格式,標記語言以及設備之間的交流架起了橋梁。

可通過 developerWorks Java 技術專區查找更多的 Java 參考資料

關于作者
Paul Everett 在 IBM 在紐約 Endicott 的分部工作,目前是在 DirectDOM 小組。他還有他自己的流程圖模板和代碼本,但認為這篇 Java 文章會很受歡迎??梢酝ㄟ^ everettp@us.ibm.com 與 Paul 聯系。

--摘自IBM網站
http://www-900.ibm.com/developerWorks/cn/java/j-dom/part3/index.shtml

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 白朗县| 棋牌| 万宁市| 景宁| 黎平县| 恩施市| 若尔盖县| 梧州市| 遵义市| 遵义县| 新河县| 元氏县| 武邑县| 滨海县| 长乐市| 利辛县| 彭州市| 金坛市| 梧州市| 苗栗县| 丁青县| 虞城县| 多伦县| 紫阳县| 洪洞县| 南通市| 镇雄县| 开化县| 中方县| 临洮县| 朔州市| 淮安市| 江源县| 阿拉善盟| 巴里| 微山县| 积石山| 凤翔县| 密山市| 罗江县| 平远县|