版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第十章遠(yuǎn)程調(diào)用和組件安全 遠(yuǎn)程調(diào)用和組件,給程序功能的擴(kuò)充提供了較大的支持。本章主要針對目前比較流行的遠(yuǎn)程調(diào)用方法和常見的組件進(jìn)行安全講解。 遠(yuǎn)程調(diào)用(RPC/RMI)為程序的分布式應(yīng)用開發(fā)架構(gòu)提供了技術(shù)支持,它不需要了解底層網(wǎng)絡(luò)通信協(xié)議,在應(yīng)用層通過網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請求服務(wù)。本章首先講解遠(yuǎn)程調(diào)用的基本原理和安全問題。 ActiveX是微軟技術(shù)系列中提供的一種控件開發(fā)模型,將組件或?qū)ο蟠虬?,提高了程序的重用性;JavaApplet是采用Java創(chuàng)建的基于HTML的程序,瀏覽器將其暫時(shí)下載到用戶的硬盤上,并在Web頁打開時(shí)在本地運(yùn)行。本章對這兩種技術(shù)也進(jìn)行了安全方面的講解。 2DCOM是在
2、微軟技術(shù)系列中,以RPC為基礎(chǔ)思想建立的組件模型,能讓組件以可靠、安全和高效的方式進(jìn)行網(wǎng)絡(luò)通訊;EJB是SUN系列中以RMI為基礎(chǔ)思想建立的服務(wù)器端組件模型,也能部署分布式應(yīng)用程序,并能充分利用java跨平臺的優(yōu)勢。本章對這兩種技術(shù)進(jìn)行了安全方面的闡述。CORBA由OMG組織制訂,是OMG為解決分布式處理環(huán)境中,不同平臺、不同語言甚至不同硬件系統(tǒng)之間的通訊而提出的一種解決方案。本章最后對CORBA安全進(jìn)行了講解。310.1 遠(yuǎn)程調(diào)用安全410.1.1 遠(yuǎn)程調(diào)用概述傳統(tǒng)的網(wǎng)絡(luò)分布式程序需要進(jìn)行復(fù)雜的底層通信編程,但是有了遠(yuǎn)程過程調(diào)用(Remote Procedure Call, RPC)之后,開
3、發(fā)網(wǎng)絡(luò)分布式應(yīng)用程序更加容易了。RPC的出現(xiàn),讓開發(fā)者不需要了解底層網(wǎng)絡(luò)通信協(xié)議,直接通過網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請求服務(wù)。該技術(shù)在1981 年由B. J . Nelson 在其博士論文中提出,后被開放式軟件基金會(OSF) 制定為分布式計(jì)算環(huán)境(DCE) 的分布式計(jì)算標(biāo)準(zhǔn)。RPC通信模型是基于客戶/ 服務(wù)器通信模型的,是一種同步通信方式,即:調(diào)用方必須等待服務(wù)器響應(yīng)。在客戶端,RPC為遠(yuǎn)程過程提供了抽象,在調(diào)用時(shí),其底層消息傳遞機(jī)制對客戶來說都是透明的。在Java系列中,RMI(Remote Method Invocation)技術(shù)是遠(yuǎn)程過程調(diào)用的一種實(shí)現(xiàn)。RMI使用Java遠(yuǎn)程消息交換協(xié)議(
4、Java Remote Messaging Protocol, JRMP)進(jìn)行通信。用Java RMI開發(fā)的應(yīng)用系統(tǒng)可以部署在任何支持Java運(yùn)行環(huán)境的平臺上。5如圖是RPC/RMI通信過程:6從圖中可以看出,在RPC 中,服務(wù)以過程的形式放在服務(wù)器端,客戶負(fù)責(zé)請求服務(wù),服務(wù)器執(zhí)行客戶的請求,運(yùn)行被調(diào)用的過程。RPC 在整個(gè)調(diào)用過程中需要經(jīng)過的步驟如下: 1:客戶端請求進(jìn)行遠(yuǎn)程調(diào)用,激活客戶端存根,指定目標(biāo)服務(wù)器; 2:客戶端存根將被調(diào)用的過程和參數(shù)打包,作為消息發(fā)送給服務(wù)器,等待數(shù)據(jù)消息的返回; 3:服務(wù)器接收消息,服務(wù)器存根根據(jù)消息中的過程和參數(shù)等信息,調(diào)用服務(wù)器端的過程; 4:服務(wù)器將結(jié)
5、果作為消息返回給客戶端存根; 5:客戶端存根將結(jié)果返回給用戶。7什么情況下適合使用遠(yuǎn)程調(diào)用呢?舉一個(gè)例子,某公司內(nèi)部辦公系統(tǒng)的結(jié)構(gòu)如下: 客戶端使用桌面應(yīng)用程序。很顯然,為了應(yīng)對數(shù)據(jù)庫的遷移或改變,訪問數(shù)據(jù)庫的代碼不應(yīng)該寫在客戶端,否則會造成大量客戶端的改變。此時(shí),訪問數(shù)據(jù)庫的代碼寫在服務(wù)器端,作為一個(gè)方法或過程的形式對外發(fā)布,客戶端可在不知道服務(wù)器細(xì)節(jié),也不知道底層通信協(xié)議的基礎(chǔ)上,訪問服務(wù)器端的這些方法,就好像調(diào)用自己機(jī)器上的方法一樣。如果用Java實(shí)現(xiàn),就可以使用RMI技術(shù)。當(dāng)然,RMI還有很多其它的功能,讀者可以參考相應(yīng)文獻(xiàn)。8 以上面應(yīng)用為例,服務(wù)器端訪問數(shù)據(jù)庫(如查詢)的代碼模擬如
6、10_01_Query.java 。import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;public class P10_01_Query extends UnicastRemoteObject implements P10_01_QueryInterface public P10_01_Query() throws RemoteExceptionpublic String query() throws RemoteException/查詢數(shù)據(jù)庫代碼return 查詢結(jié)果;9import java
7、.rmi.Remote;import java.rmi.RemoteException;public interface P10_01_QueryInterface extends Remotepublic String query() throws RemoteException;P10_01_QueryInterface.java的代碼為:10很顯然,服務(wù)器端的P10_01_QueryInterface接口內(nèi)并沒有核心代碼。接下來將服務(wù)器對象對外發(fā)布。見代碼P10_01_RunServer.java。import java.rmi.Naming;public class P10_01_Ru
8、nServer public static void main(String args)throws Exception P10_01_QueryInterface queryInterface=new P10_01_Query(); /啟動注冊表 Runtime.getRuntime().exec(rmiregistry); /將這個(gè)對象起一個(gè)JNDI名稱,放入注冊表 Naming.rebind(queryInterface,queryInterface); 11運(yùn)行,服務(wù)器端的對象即對外發(fā)布??蛻舳说玫椒?wù)器端發(fā)布的接口,然后遠(yuǎn)程調(diào)用服務(wù)器端的方法,客戶端代碼見P10_01_Client.
9、java:import java.rmi.Naming;public class P10_01_Client public static void main(String args) throws ExceptionP10_01_QueryInterface queryInterface=(P10_01_QueryInterface)Naming.lookup(rmi://queryInterface);String result=queryInterface.query();System.out.println(result);運(yùn)行,即可調(diào)用服務(wù)器端的query方法。顯示結(jié)
10、果為:12從上面的例子可以看出,客戶端無需知道服務(wù)器端的核心代碼,只需要知道接口即可。當(dāng)然,在該例子中,省略了底層的一些通信細(xì)節(jié)的支持類。以上例子同時(shí)說明體現(xiàn)了RPC的其他好處: 1:給程序在異構(gòu)環(huán)境下進(jìn)行通信提供了可能(異構(gòu)主要可以體現(xiàn)在: 網(wǎng)絡(luò)環(huán)境中的多種硬件系統(tǒng)平臺; 硬件平臺上的不同的系統(tǒng)軟件; 不同的網(wǎng)絡(luò)協(xié)議或網(wǎng)絡(luò)體系結(jié)構(gòu)連接;等等。 2:在異構(gòu)網(wǎng)絡(luò)環(huán)境下,需要把分散在各地的計(jì)算機(jī)系統(tǒng)集成起來,充分利用系統(tǒng)中分散的計(jì)算資源,由網(wǎng)絡(luò)中的多臺計(jì)算機(jī)協(xié)同工作完成某一任務(wù),RPC也給這種需求的實(shí)現(xiàn)提供了可能。13例一:HelloWordHelloTask接口: public interfac
11、e HelloTask public String execute(); import java.io.Serializable; public class HelloTaskImpl implements HelloTask,Serializable private static final long serialVersionUID = 1L; public String execute() return Hello World; HelloTaskImpl 代碼:14例一:HelloWord import java.rmi.RemoteException; public interfac
12、e IHello extends java.rmi.Remote String say(HelloTask task) throws RemoteException; IHello接口代碼:15例一:HelloWord服務(wù)器端代碼為:16例一:HelloWord客戶端代碼為: import java.rmi.Naming; public class HelloClient public static void main(String args) try IHello hi = (IHello) Naming.lookup(rmi:/:2500/hello); HelloTas
13、k task = new HelloTaskImpl(); for (int i = 0; i 10; i+) System.out.println(hi.say(task); catch (Exception e) e.printStackTrace(); 17運(yùn)行結(jié)果為:18例二客戶端通過服務(wù)器端執(zhí)行算術(shù)運(yùn)算,Calculator接口的代碼為:import java.rmi.Remote;public interface Calculator extends Remotepublic long add(long a, long b)throws java.rmi.RemoteExcepti
14、on;public long sub(long a, long b)throws java.rmi.RemoteException;public long mul(long a, long b)throws java.rmi.RemoteException;public long div(long a, long b)throws java.rmi.RemoteException;19CalculatorImpl.java實(shí)現(xiàn)了Calculator的接口,代碼為:import java.rmi.server.UnicastRemoteObject;public class Calculator
15、Impl extends UnicastRemoteObject implements Calculatorpublic CalculatorImpl()throws java.rmi.RemoteException super();public long add(long a, long b)throws java.rmi.RemoteException return a + b;public long sub(long a, long b)throws java.rmi.RemoteException return a - b;public long mul(long a, long b)
16、throws java.rmi.RemoteException return a * b;public long div(long a, long b)throws java.rmi.RemoteException return a / b; 例二20服務(wù)器端代碼CalculatorServer.java為:例二import java.rmi.Naming;public class CalculatorServer public CalculatorServer() try Calculator c = new CalculatorImpl(); Naming.rebind(rmi:/loca
17、lhost:1099/CalculatorService, c); catch (Exception e) System.out.println(Trouble: + e);public static void main(String args) new CalculatorServer(); 21例二客戶端的代碼為:22運(yùn)行結(jié)果為:2310.1.2 安全問題RPC提供了具有強(qiáng)大的網(wǎng)絡(luò)編程功能,給編程帶來了極大方便,并為分布式計(jì)算提供了支持,但是還存在一些安全問題。主要體現(xiàn)在: 1:攻擊者可能會惡意地調(diào)用RPC服務(wù)器中的過程,或者輸入一些惡意的數(shù)據(jù)導(dǎo)致服務(wù)器失效。由于RPC 處理過程中,底層使
18、用的仍然是TCP/IP協(xié)議,而TCP/ IP協(xié)議本身存在緩沖區(qū)溢出的問題,攻擊者就有可能利用這一漏洞,對系統(tǒng)進(jìn)行攻擊。一般情況下,RPC使用的是135端口(RMI使用的是1099)。攻擊者可偽裝成合法客戶端,向RPC端口傳送信息,并讓該信息溢出服務(wù)器端的RPC 緩沖區(qū),如果客戶端發(fā)送的信息經(jīng)過了精心的設(shè)計(jì),那么足夠有可能來執(zhí)行惡意的代碼。通常,如果服務(wù)器被攻擊,一些基于RPC服務(wù),如DCOM,都將無法正常運(yùn)行。更有甚者,攻擊者有可能獲得對遠(yuǎn)程服務(wù)器的完全控制,對服務(wù)器隨意執(zhí)行操作, 如:安裝程序、篡改數(shù)據(jù)、格式化硬盤、創(chuàng)建用戶或增加權(quán)限等等。24通常利用以下方法來解決此問題: 利用防火墻封堵端
19、口??梢栽O(shè)置防火墻的分組過濾規(guī)則,過濾掉RPC端口和影響到DCOM 函數(shù)調(diào)用的數(shù)據(jù)包,通過這種方法,可以避免防火墻內(nèi)的系統(tǒng)被外部攻擊。臨時(shí)禁用某些服務(wù),如DCOM。如果因?yàn)橐恍┨厥庠驘o法過濾RPC端口,也可臨時(shí)關(guān)閉DCOM服務(wù),來保證網(wǎng)絡(luò)安全。不過,該方法將會導(dǎo)致系統(tǒng)運(yùn)行異常,因此一般不建議使用。有關(guān)方法大家可以參考相關(guān)文檔。 252:客戶端和服務(wù)器之間傳遞的信息可能被竊聽;攻擊者可能會對傳輸中的數(shù)據(jù)進(jìn)行篡改。因?yàn)樵赗PC 通信機(jī)制中,調(diào)用組件和返回客戶信息都是通過傳送消息進(jìn)行,由于消息在傳送過程中采取的安全措施是比較簡單,很容易被非法用戶截獲,造成信息泄密。為了保證網(wǎng)絡(luò)系統(tǒng)中的消息信息的安
20、全,我們可以采用數(shù)據(jù)加密和解密的方法來實(shí)現(xiàn)。這里我們可以采用加密解密與數(shù)字簽名來實(shí)現(xiàn),該方法在后面的章節(jié)中將會有詳細(xì)的敘述。 2610.2 ActiveX安全2710.2.1 ActiveX概述ActiveX,也稱ActiveX插件、組件或者控件,為開發(fā)人員和用戶提供了一個(gè)快速而簡便的方法,將某些內(nèi)容和功能集成在一起。它是一些軟件組件或?qū)ο蟮募希梢员恢赜玫匕趹?yīng)用程序中執(zhí)行。以WEB網(wǎng)頁為例,ActiveX組件實(shí)際上一些可執(zhí)行的代碼的集合,可以復(fù)用,這些可復(fù)用的組件可以被嵌入到網(wǎng)頁中,當(dāng)客戶請求時(shí),被客戶端瀏覽器下載,在客戶端執(zhí)行。一般這個(gè)組件可以為EXE文件、DLL文件或者OCX文件等
21、。隨著Web程序的發(fā)展,ActiveX在Web中的應(yīng)用越來越廣泛,在緩解B/S模式服務(wù)器端負(fù)擔(dān)方面,作出了較大貢獻(xiàn)。比如,在一個(gè)股票查詢頁面中,用戶希望得到以某種圖表形狀顯示的結(jié)果,傳統(tǒng)的 WEB 程序中,該圖表必須由服務(wù)器根據(jù)查詢的數(shù)據(jù)生成之后送給客戶。由于圖片占用空間較大,因此服務(wù)器端的響應(yīng)很慢,給客戶一個(gè)不好的用戶體驗(yàn)。如果使用ActiveX,則可以將畫出各種圖表的功能寫在ActiveX內(nèi),客戶查詢時(shí),該控件被下載并注冊到客戶系統(tǒng)上,服務(wù)器只需將查詢的結(jié)果數(shù)據(jù)傳遞給客戶端,圖表生成工作由客戶機(jī)上的ActiveX控件來完成,大大減少了用戶等待時(shí)間,減輕了網(wǎng)絡(luò)帶寬的壓力,釋放了服務(wù)器的負(fù)擔(dān)。
22、28以Web程序?yàn)槔珹ctiveX的運(yùn)行過程為: 由于具有可重用性方面的優(yōu)勢, ActiveX被廣泛應(yīng)用,ActiveX的開發(fā)工具逐日增加。由于在Microsoft系列中,ActiveX不依賴于語言,所以傳統(tǒng)的開發(fā)工具基本上都能開發(fā)。如Delphi、Visual Basic、Visual C+、.NET等,都可以成為ActiveX的開發(fā)工具,整個(gè)過程比較簡單。不過,目前,只有windows系列的操作系統(tǒng)才支持ActiveX的運(yùn)行,在瀏覽器方面,也只有IE提供了對ActiveX的有效支持。如果使用的是其他瀏覽器的話,必須配置第三方所提供的插件才能支持ActiveX控件。2910.2.2 安全問
23、題如前所述, ActiveX控件實(shí)際上就是一個(gè)可執(zhí)行文件,提供了特定功能,具有某些屬性、某些方法,甚至具備外界可以捕獲的事件,方便了應(yīng)用的開發(fā)和執(zhí)行。ActiveX的安全問題主要體現(xiàn)在:ActiveX控件由于可以被嵌入到某些程序中,因此可能在客戶的計(jì)算機(jī)上運(yùn)行。如果攻擊者在ActiveX內(nèi)編寫一些惡意代碼,就可能在用戶執(zhí)行這個(gè)ActiveX時(shí),攻擊其計(jì)算機(jī)。如: 客戶運(yùn)行程序時(shí),不知不覺被格式化硬盤; 客戶瀏覽網(wǎng)頁時(shí),注冊表被修改; 客戶的保密信息被后門傳往攻擊者的服務(wù)器; 客戶硬盤被共享;等等。 30該問題一般出現(xiàn)在Web程序中,對于用戶來說,可以通過以下方法解決: 1:在使用ActiveX
24、控件時(shí),必須確認(rèn)其簽名; 2:不能讓ActiveX控件被自動下載,下載前必須有提示; 3:不下載未簽名的ActiveX控件; 4:如果要求非常嚴(yán)格,可以禁用任何ActiveX控件;等等。 31具體的做法,可以在IE的“工具”“Internet選項(xiàng)”“安全”中的“自定義級別”中,進(jìn)行設(shè)置。如圖所示: 3210.3 JavaApplet安全3310.3.1 JavaApplet概述和ActiveX在Web程序中的應(yīng)用一樣,Java系列也推出了相應(yīng)的技術(shù),那就是Java Applet。Java Applet是用Java語言編寫的,基于HTML的小應(yīng)用程序,也可以直接嵌入到網(wǎng)頁中,并能夠產(chǎn)生特殊的效果
25、。當(dāng)客戶端訪問服務(wù)器Web頁時(shí),客戶端瀏覽器就會下載Java Applet,將其暫存到用戶的硬盤上,并以一定的生命周期在本地運(yùn)行。關(guān)于JavaApplet的基本知識,可以參考相關(guān)文檔。 34Java Applet的運(yùn)行過程為: 35不過,要使用Java Applet,其前提是用戶使用的瀏覽器必須支持Java,這可以通過安裝一些Java運(yùn)行插件來實(shí)現(xiàn),當(dāng)前流行的網(wǎng)絡(luò)瀏覽器,基本上都可以通過一些手段讓其支持Java。同樣,以股票查詢系統(tǒng)為例,將圖表生成的工作交給Java Applet在客戶端實(shí)現(xiàn),可以減少用戶等待時(shí)間,減輕網(wǎng)絡(luò)帶寬的壓力,釋放服務(wù)器的負(fù)擔(dān)。P10_02.java是一段簡單的Appl
26、et代碼。 36編譯,接下來在一個(gè)網(wǎng)頁文件中嵌入其.class文件。運(yùn)行該網(wǎng)頁,效果如下: 3710.3.2 安全問題由于Java是一門安全性要求很高的語言,因此,Java Applet安全性比ActiveX要好一些,默認(rèn)情況下,Java Applet的安全限制如下:1:Applet放在客戶端,但是不能在客戶端執(zhí)行任何的可執(zhí)行文件;2:Applet不能讀寫客戶端文件系統(tǒng)中的文件;3:在通信方面,Applet只能與它下載的源服務(wù)器進(jìn)行通信,而不能與網(wǎng)絡(luò)上其他的機(jī)器通信;4:在獲取敏感信息方面,Applet只能獲取客戶端計(jì)算機(jī)的部分信息,如操作系統(tǒng)名稱和版本號、文件及路徑分隔符等,而不會泄露其他敏
27、感信息,如注冊表、系統(tǒng)安全配置等;5:此外,Applet還可通過數(shù)字簽名進(jìn)行不同的安全授權(quán);關(guān)于數(shù)字簽名的知識,后面的章節(jié)具有詳細(xì)的敘述。因此,對Applet的安全問題,可以考慮得簡單一些。3810.4 DCOM安全3910.4.1 DCOM概述分布式組件對象模型(Distributed Component Object Model, DCOM),是Microsoft技術(shù)系列中推出的一種遠(yuǎn)程組件調(diào)用模型,它的底層實(shí)現(xiàn)是基于RPC的。實(shí)際上,DCOM是組件對象模型(Component Object Model, COM)的進(jìn)一步擴(kuò)展。在DCOM體系結(jié)構(gòu)中,具有兩個(gè)重要的參與者: 服務(wù)器端。服務(wù)器
28、端實(shí)現(xiàn)具體的業(yè)務(wù)邏輯,對外提供接口,以服務(wù)的形式發(fā)布; 客戶端。客戶端程序?qū)ο竽軌蛘埱蠓?wù)器上發(fā)布的服務(wù),調(diào)用接口,實(shí)際上調(diào)用服務(wù)器端的業(yè)務(wù)邏輯。服務(wù)器端和客戶端程序可以不在同一臺機(jī)器上。DCOM客戶端對服務(wù)器端的調(diào)用相對簡單,不用考慮底層網(wǎng)絡(luò)協(xié)議的細(xì)節(jié);而服務(wù)器端也不需要考慮數(shù)據(jù)怎樣傳輸給客戶端,只需集中精力于業(yè)務(wù)邏輯邏輯的編寫。40因此,可以說DCOM為局域網(wǎng)、廣域網(wǎng)甚至Internet上不同計(jì)算機(jī)的對象之間的通訊提供了一個(gè)良好的模型。特別是對于分布式計(jì)算的情況,使用DCOM可以達(dá)到良好的效果,滿足應(yīng)用的需求。另外,DCOM在配置上也比較方便??蛻舳撕头?wù)器的通信過程中,如果要改變兩者之間
29、的連接或通信方式,DCOM無需改變源碼,也無需重新編譯程序,只需要改變配置即可。 41以一個(gè)典型的遠(yuǎn)程調(diào)用服務(wù)的項(xiàng)目為例,DCOM運(yùn)行的基本架構(gòu)為: 在該架構(gòu)中,應(yīng)用服務(wù)器和DCOM服務(wù)器不在同一臺機(jī)器上,兩者之間通過接口進(jìn)行通信。在Microsoft系列中,DCOM是語言無關(guān)的,很多語言都可以用來創(chuàng)建DCOM組件,很多語言,如Java、Visual C+、VB、Delphi等也都可以很好地和DCOM發(fā)生相互作用。由于DCOM的語言獨(dú)立性,應(yīng)用系統(tǒng)開發(fā)人員可以選擇自己最熟悉的語言和工具來進(jìn)行開發(fā)。4210.4.2 安全問題DCOM的安全問題主要體現(xiàn)在以下幾個(gè)方面: 1: DCOM充分使用了Wi
30、ndows NT提供的安全框架。因此,原則上講,在服務(wù)器端組件和客戶端,DCOM無需進(jìn)行安全性設(shè)計(jì)和編碼工作,就可以為分布式應(yīng)用提供安全性保障。因此,可以說,缺省情況下,DCOM提供了一個(gè)有效的安全性機(jī)制,開發(fā)人員在開發(fā)分布式應(yīng)用時(shí),不需要擔(dān)心安全問題。2:對于某些應(yīng)用系統(tǒng),如果需要確定方法級的用戶訪問控制,則使用組件級的訪問控制列表就不夠了。如一個(gè)DCOM中有兩個(gè)方法:查看事務(wù)和修改事務(wù),這兩個(gè)方法的訪問權(quán)限由不同的用戶持有,此種情況下,安全策略為: 將所有的用戶名以及其許可和策略保存在數(shù)據(jù)庫內(nèi); 當(dāng)客戶端調(diào)用一個(gè)方法時(shí),服務(wù)器端組件獲取其用戶名,在自己的數(shù)據(jù)庫中查找有關(guān)的許可和策略; 根據(jù)
31、客戶端的身份,服務(wù)器端組件僅僅執(zhí)行允許該客戶執(zhí)行的安全對象中的某些操作。43提示:用戶的許可和策略保存在數(shù)據(jù)庫中,用戶不必要為其安全性擔(dān)心,因?yàn)橛玫降氖荳indows NT內(nèi)置的安全性框架。由于篇幅所限,本章無法對DCOM安全問題進(jìn)行更加深入的研究,讀者可以參考相關(guān)文獻(xiàn)。 4410.5 EJB安全4510.5.1 EJB概述企業(yè)級Java Bean(Enterprise Java Bean, EJB)是sun技術(shù)系列中提供的服務(wù)器端組件模型,也可以用于部署分布式應(yīng)用程序。由于它具有跨平臺的優(yōu)點(diǎn),在大型系統(tǒng)和對事務(wù)要求較高的系統(tǒng)中比較常見。EJB是JAVAEE的一部分,基于Java技術(shù),定義了一
32、個(gè)開發(fā)分布式應(yīng)用程序的標(biāo)準(zhǔn)。當(dāng)軟件系統(tǒng)的規(guī)模擴(kuò)大之后,傳統(tǒng)的兩層結(jié)構(gòu)難于維護(hù),而EJB的使用,促進(jìn)了多層結(jié)構(gòu)的發(fā)展,使得層與層之間的耦合性大大降低。EJB是中間件的一種實(shí)現(xiàn)方式,和其他的中間件相比,EJB還具有如下優(yōu)點(diǎn): 461:對象緩存機(jī)制。在訪問量較大,對性能要求較高的系統(tǒng)中,對象緩存機(jī)制能夠大大提高系統(tǒng)性能,但是程序員如果自己編寫對象緩存機(jī)制,要考慮到很多底層的安全問題,并不容易(如要考慮線程安全和并發(fā)控制等問題),可能將其精力從業(yè)務(wù)邏輯的編寫中分散出去。而EJB容器中提供了自動的對象緩存機(jī)制,無需另外編寫代碼,就可以利用服務(wù)器的特性。 2:事務(wù)機(jī)制。同樣,在安全性要求較高的系統(tǒng)中,事務(wù)
33、控制關(guān)系到系統(tǒng)的穩(wěn)定,如果程序員自己編寫事務(wù)程序,也比較消耗精力,并且不容易編寫得很安全。EJB提供了非常全面的事務(wù)機(jī)制,程序員只需要簡單配置事務(wù)控制策略,也不需要編寫任何代碼。47EJB分為3類,分別是: 會話Bean(Session Bean)。會話Bean用于實(shí)現(xiàn)業(yè)務(wù)邏輯,可以設(shè)置為有狀態(tài)的,也可以設(shè)置為無狀態(tài)的; 實(shí)體Bean(Entity Bean)。實(shí)體Bean用于實(shí)現(xiàn)對象關(guān)系映射,將數(shù)據(jù)庫表中的記錄映射為內(nèi)存中的Bean對象。對Bean的實(shí)例化、刪除、修改、查詢能夠和數(shù)據(jù)庫同步; 消息驅(qū)動Bean(MessageDriven Bean。消息驅(qū)動Bean能夠接收客戶端發(fā)送的JMS消
34、息然后處理,實(shí)現(xiàn)異步的功能調(diào)用。48EJB中,組件之間也是用接口進(jìn)行通信的。以EJB2.0遠(yuǎn)程接口調(diào)用EJB對象為例,EJB的運(yùn)行過程為: 關(guān)于EJB編寫的一些其他問題,讀者可以參考相關(guān)文檔。4910.5.2 開發(fā)安全的EJB EJB 開發(fā)過程中的安全問題體現(xiàn)在以下幾個(gè)方面: 1:由于EJB容器已經(jīng)提供了較好的安全保障,理論上講,EJB 的業(yè)務(wù)方法源代碼中,不應(yīng)該包含與安全相關(guān)的邏輯。2:EJB可以提供對受保護(hù)資源的受控訪問。對于組件級別的授權(quán)和身份驗(yàn)證,可以在EJB打包時(shí)的部署描述符中配置。3:EJB中允許設(shè)置其安全角色,部署EJB時(shí),將安全角色映射到安全標(biāo)識(如用戶標(biāo)識或用戶組等),這樣可
35、以批量設(shè)置對某些資源的訪問。安全角色通常也在部署的描述符中配置。50以下例子中指定了兩個(gè)安全角色:customer和admin: . customer customer admin admin . 514:EJB中允許聲明調(diào)用某個(gè)方法的權(quán)限,來確定某些方法只能由某些角色調(diào)用。該聲明也是在部署描述符中進(jìn)行: 上面的配置說明,customer角色可以訪問CustomerService內(nèi)的所有方法,能訪問PayService中的getBalance方法。 customer CustomerService * PayService getBalance 525:在EJB中,也可以利用編程的方法來實(shí)現(xiàn)安
36、全管理。EJB 層中的編程安全方法由context調(diào)用,主要包括以下方法:getCallerPrincipal:返回java.security.Principal 對象,封裝了EJB的調(diào)用者;可以用Principal 的getName方法得知用戶名; isCallerInRole:傳入一個(gè)用戶名,返回一個(gè)布爾類型的變量,用于確定調(diào)用者的角色。5310.6 CORBA安全5410.6.1 CORBA概述公共對象請求代理體系結(jié)構(gòu)3(Common Object Request Broker Architecture,CORBA)是一種標(biāo)準(zhǔn)的面向?qū)ο髴?yīng)用程序體系規(guī)范。CORBA由對象管理組織(Object Managemnet Group, OMG)組織制訂,是OMG為解決分布式處理環(huán)境中,不同平臺、不同語言甚至不同硬件系統(tǒng)的之間的通訊而提出的一種解決方案。提示:OMG組織是一個(gè)國際性的非盈利組織,其職責(zé)是制訂工業(yè)指南和對象管理規(guī)范,為應(yīng)用開發(fā)提供一些公共框架。55CORBA實(shí)際上是由對象管理組織設(shè)立一組編程標(biāo)準(zhǔn)。在這個(gè)標(biāo)準(zhǔn)中,定義了一系列API和通信協(xié)議,用于達(dá)到以下目標(biāo): 不同語言
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024美容院客戶投訴處理協(xié)議
- 2024年銷售代表就業(yè)協(xié)議書3篇
- 二零二五年度現(xiàn)代簡約餐廳裝飾裝修與品牌推廣合同3篇
- 2025年度大米種植與收購金融服務(wù)合同3篇
- 2025年度道路施工安全防護(hù)及交通疏導(dǎo)協(xié)議3篇
- 2024年運(yùn)輸合同之貨物運(yùn)輸路線與時(shí)間保障
- 2025年度智能調(diào)光窗簾系統(tǒng)項(xiàng)目合同書3篇
- 2025年度臨時(shí)運(yùn)輸司機(jī)績效考核及獎勵(lì)合同4篇
- 2024衣柜墻板吊頂裝修工程款項(xiàng)支付與結(jié)算合同
- 2025年度二零二五廠區(qū)生態(tài)修復(fù)與綠化養(yǎng)護(hù)綜合服務(wù)合同3篇
- 2025年中國高純生鐵行業(yè)政策、市場規(guī)模及投資前景研究報(bào)告(智研咨詢發(fā)布)
- 湖北省黃石市陽新縣2024-2025學(xué)年八年級上學(xué)期數(shù)學(xué)期末考試題 含答案
- 2022-2024年浙江中考英語試題匯編:完形填空(學(xué)生版)
- 2025年廣東省廣州市荔灣區(qū)各街道辦事處招聘90人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 中試部培訓(xùn)資料
- 硝化棉是天然纖維素硝化棉制造行業(yè)分析報(bào)告
- 央視網(wǎng)2025亞冬會營銷方案
- 北師大版數(shù)學(xué)三年級下冊豎式計(jì)算題100道
- 計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)全套教學(xué)課件
- 屋頂分布式光伏發(fā)電項(xiàng)目施工重點(diǎn)難點(diǎn)分析及應(yīng)對措施
- 胃鏡下超聲穿刺護(hù)理配合
評論
0/150
提交評論