安全程序設計:10 遠程調(diào)用和組件安全_第1頁
安全程序設計:10 遠程調(diào)用和組件安全_第2頁
安全程序設計:10 遠程調(diào)用和組件安全_第3頁
安全程序設計:10 遠程調(diào)用和組件安全_第4頁
安全程序設計:10 遠程調(diào)用和組件安全_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第十章遠程調(diào)用和組件安全 遠程調(diào)用和組件,給程序功能的擴充提供了較大的支持。本章主要介紹目前比較流行的遠程調(diào)用方法和常見的組件的安全問題 遠程調(diào)用(RPC/RMI)為程序的分布式應用開發(fā)架構提供了技術支持,它不需要了解底層網(wǎng)絡通信協(xié)議,在應用層通過網(wǎng)絡從遠程計算機程序上請求服務。本章首先介紹遠程調(diào)用的基本原理和安全問題 常見組件ActiveX是微軟技術系列中提供的一種控件開發(fā)模型,將組件或對象打包,提高了程序的重用性;JavaApplet是采用Java創(chuàng)建的基于HTML的程序,瀏覽器將其暫時下載到用戶的硬盤上,并在Web頁打開時在本地運行 常見組件DCOM是在微軟技術系列中,以RPC為基礎思想

2、建立的組件模型,能讓組件以可靠、安全和高效的方式進行網(wǎng)絡通訊;EJB是是SUN系列中以RMI為基礎思想建立的服務器端組件模型,也能部署分布式應用程序,并能充分利用java跨平臺的優(yōu)勢常見組件CORBA由OMG組織制訂,是OMG為解決分布式處理環(huán)境中,不同平臺、不同語言甚至不同硬件系統(tǒng)的之間的通訊而提出的一種解決方案10.1 遠程調(diào)用安全10.1.1 遠程調(diào)用概述傳統(tǒng)的網(wǎng)絡分布式程序需要進行復雜的底層通信編程,但是有了遠程過程調(diào)用(Remote Procedure Call, RPC)之后,開發(fā)網(wǎng)絡分布式應用程序更加容易了RPC的出現(xiàn),讓開發(fā)者不需要了解底層網(wǎng)絡通信協(xié)議,直接通過網(wǎng)絡從遠程計算機

3、程序上請求服務該技術在1981 年由B. J . Nelson 在其博士論文中提出,后被開放式軟件基金會(OSF) 制定為分布式計算環(huán)境(DCE) 的分布式計算標準10.1.1 遠程調(diào)用概述RPC通信模型是基于客戶/ 服務器通信模型的,是一種同步通信方式,即:調(diào)用方必須等待服務器響應在客戶端,RPC為遠程過程提供了抽象,在調(diào)用時,其底層消息傳遞機制對客戶來說都是透明的在Java系列中,RMI(Remote Method Invocation)技術是遠程過程調(diào)用的一種實現(xiàn)RMI使用Java遠程消息交換協(xié)議(Java Remote Messaging Protocol, JRMP)進行通信用Jav

4、a RMI開發(fā)的應用系統(tǒng)可以部署在任何支持Java運行環(huán)境的平臺上如圖是RPC/RMI通信過程:從圖中可以看出,在RPC 中,服務以過程的形式放在服務器端,客戶負責請求服務,服務器執(zhí)行客戶的請求,運行被調(diào)用的過程RPC 在整個調(diào)用過程中需要經(jīng)過的步驟如下: 客戶端請求進行遠程調(diào)用,激活客戶端存根,指定目標服務器; 客戶端存根將被調(diào)用的過程和參數(shù)打包,作為消息發(fā)送給服務器,等待數(shù)據(jù)消息的返回; 服務器接收消息,服務器存根根據(jù)消息中的過程和參數(shù)等信息,調(diào)用服務器端的過程; 服務器將結果作為消息返回給客戶端存根; 客戶端存根將結果返回給用戶什么情況下適合使用遠程調(diào)用呢?舉一個例子,某公司內(nèi)部辦公系統(tǒng)

5、的結構如下: 客戶端使用桌面應用程序。很顯然,為了應對數(shù)據(jù)庫的遷移或改變,訪問數(shù)據(jù)庫的代碼不應該寫在客戶端,否則會造成大量客戶端的改變。此時,訪問數(shù)據(jù)庫的代碼寫在服務器端,作為一個方法或過程的形式對外發(fā)布,客戶端可在不知道服務器細節(jié),也不知道底層通信協(xié)議的基礎上,訪問服務器端的這些方法,就好像調(diào)用自己機器上的方法一樣。如果用Java實現(xiàn),就可以使用RMI技術。當然,RMI還有很多其它的功能,讀者可以參考相應文獻。這樣,開發(fā)客戶端無需知道服務器端的核心代碼,只需要知道接口即可RPC的其他好處: 1:給程序在異構環(huán)境下進行通信提供了可能(異構主要可以體現(xiàn)在: 網(wǎng)絡環(huán)境中的多種硬件系統(tǒng)平臺; 硬件平

6、臺上的不同的系統(tǒng)軟件; 不同的網(wǎng)絡協(xié)議或網(wǎng)絡體系結構連接;等等。 2:在異構網(wǎng)絡環(huán)境下,需要把分散在各地的計算機系統(tǒng)集成起來,充分利用系統(tǒng)中分散的計算資源,由網(wǎng)絡中的多臺計算機協(xié)同工作完成某一任務,RPC也給這種需求的實現(xiàn)提供了可能10.1.2 安全問題RPC提供了具有強大的網(wǎng)絡編程功能,給編程帶來了極大方便,并為分布式計算提供了支持,但是還存在一些安全問題。主要體現(xiàn)在: 1:攻擊者可能會惡意地調(diào)用RPC服務器中的過程,或者輸入一些惡意的數(shù)據(jù)導致服務器失效。由于RPC 處理過程中,底層使用的仍然是TCP/IP協(xié)議,而TCP/ IP協(xié)議本身存在緩沖區(qū)溢出的問題,攻擊者就有可能利用這一漏洞,對系統(tǒng)

7、進行攻擊。一般情況下,RPC使用的是135端口(RMI使用的是1099)。攻擊者可偽裝成合法客戶端,向RPC端口傳送信息,并讓該信息溢出服務器端的RPC 緩沖區(qū),如果客戶端發(fā)送的信息經(jīng)過了精心的設計,那么足夠有可能來執(zhí)行惡意的代碼安全問題通常,如果服務器被攻擊,一些基于RPC服務,如DCOM,都將無法正常運行更有甚者,攻擊者有可能獲得對遠程服務器的完全控制,對服務器隨意執(zhí)行操作 如:安裝程序、篡改數(shù)據(jù)、格式化硬盤、創(chuàng)建用戶或增加權限等等通常利用以下方法來解決此類問題: 利用防火墻封堵端口??梢栽O置防火墻的分組過濾規(guī)則,過濾掉RPC端口和影響到DCOM 函數(shù)調(diào)用的數(shù)據(jù)包,通過這種方法,可以避免防

8、火墻內(nèi)的系統(tǒng)被外部攻擊臨時禁用某些服務,如DCOM。如果因為一些特殊原因無法過濾RPC端口,也可臨時關閉DCOM服務,來保證網(wǎng)絡安全。不過,該方法將會導致系統(tǒng)運行異常,因此一般不建議使用。有關方法大家可以參考相關文檔2:客戶端和服務器之間傳遞的信息可能被竊聽;攻擊者可能會對傳輸中的數(shù)據(jù)進行篡改。因為在RPC 通信機制中,調(diào)用組件和返回客戶信息都是通過傳送消息進行,由于消息在傳送過程中采取的安全措施是比較簡單,很容易被非法用戶截獲,造成信息泄密為了保證網(wǎng)絡系統(tǒng)中的消息信息的安全,我們可以采用數(shù)據(jù)加密和解密的方法來實現(xiàn)。這里我們可以采用加密解密與數(shù)字簽名來實現(xiàn),該方法在后面的章節(jié)中將會有詳細的敘述

9、 10.2 ActiveX安全10.2.1 ActiveX概述ActiveX,也稱ActiveX插件、組件或者控件,為開發(fā)人員和用戶提供了一個快速而簡便的方法,將某些內(nèi)容和功能集成在一起。它是一些軟件組件或對象的集合,可以被重用地包含在應用程序中執(zhí)行以WEB網(wǎng)頁為例,ActiveX組件實際上一些可執(zhí)行的代碼的集合,可以復用,這些可復用的組件可以被嵌入到網(wǎng)頁中,當客戶請求時,被客戶端瀏覽器下載,在客戶端執(zhí)行。一般這個組件可以為EXE文件、DLL文件或者OCX文件等10.2.1 ActiveX概述隨著Web程序的發(fā)展,ActiveX在Web中的應用越來越廣泛,在緩解B/S模式服務器端負擔方面,作出

10、了較大貢獻比如,在一個股票查詢頁面中,用戶希望得到以某種圖表形狀顯示的結果,傳統(tǒng)的 WEB 程序中,該圖表必須由服務器根據(jù)查詢的數(shù)據(jù)生成之后送給客戶。由于圖片占用空間較大,因此服務器端的響應很慢,給客戶一個不好的用戶體驗10.2.1 ActiveX概述如果使用ActiveX,則可以將畫出各種圖表的功能寫在ActiveX內(nèi),客戶查詢時,該控件被下載并注冊到客戶系統(tǒng)上,服務器只需將查詢的結果數(shù)據(jù)傳遞給客戶端,圖表生成工作由客戶機上的ActiveX控件來完成,大大減少了用戶等待時間,減輕了網(wǎng)絡帶寬的壓力,釋放了服務器的負擔以Web程序為例,ActiveX的運行過程為: 由于重用性方面的優(yōu)勢, Act

11、iveX被廣泛應用,ActiveX的開發(fā)工具逐日增加。由于在Microsoft系列中,ActiveX不依賴于語言,所以傳統(tǒng)的開發(fā)工具基本上都能開發(fā)。如Delphi、Visual Basic、Visual C+、.NET等,都可以成為ActiveX的開發(fā)工具,整個過程比較簡單不過,目前,只有windows系列的操作系統(tǒng)才支持ActiveX的運行,在瀏覽器方面,也只有IE提供了對ActiveX的有效支持。如果使用的是其他瀏覽器的話,必須配置第三方所提供的插件才能支持ActiveX控件10.2.2 安全問題如前所述, ActiveX控件實際上就是一個可執(zhí)行文件,提供了特定功能,具有某些屬性、某些方法

12、,甚至具備外界可以捕獲的事件,方便了應用的開發(fā)和執(zhí)行執(zhí)行ActiveX的安全問題主要體現(xiàn)在:ActiveX控件由于可以被嵌入到某些程序中,因此可能在客戶的計算機上運行。如果攻擊者在ActiveX內(nèi)編寫一些惡意代碼,就可能在用戶執(zhí)行這個ActiveX時,攻擊其計算機。如: 客戶運行程序時,不知不覺被格式化硬盤; 客戶瀏覽網(wǎng)頁時,注冊表被修改; 客戶的保密信息被后門傳往攻擊者的服務器; 客戶硬盤被共享;等等 該問題一般出現(xiàn)在Web程序中,對于用戶來說,可以通過以下方法解決: 1:在使用ActiveX控件時,必須確認其簽名; 2:不能讓ActiveX控件被自動下載,下載前必須有提示; 3:不下載未簽

13、名的ActiveX控件; 4:如果要求非常嚴格,可以禁用任何ActiveX控件;等等 具體的做法,可以在IE的“工具”“Internet選項”“安全”中的“自定義級別”中,進行設置。如圖所示: 10.3 JavaApplet安全10.3.1 JavaApplet概述和ActiveX在Web程序中的應用一樣,Java系列也推出了相應的技術,那就是Java AppletJava Applet是用Java語言編寫的,基于HTML的小應用程序,也可以直接嵌入到網(wǎng)頁中,并能夠產(chǎn)生特殊的效果當客戶端訪問服務器Web頁時,客戶端瀏覽器就會下載Java Applet,將其暫存到用戶的硬盤上,并以一定的生命周期

14、在本地運行關于JavaApplet的基本知識,讀者可以參考相關文檔Java Applet的運行過程為: 不過,要使用Java Applet,其前提是用戶使用的瀏覽器必須支持Java,這可以通過安裝一些Java運行插件來實現(xiàn),當前流行的網(wǎng)絡瀏覽器,基本上都可以通過一些手段讓其支持Java同樣,以上節(jié)的股票查詢系統(tǒng)為例,將圖表生成的工作交給Java Applet在客戶端實現(xiàn),也可以減少用戶等待時間,減輕網(wǎng)絡帶寬的壓力,釋放服務器的負擔。P10_02.java是一段簡單的Applet代碼。編譯,接下來在一個網(wǎng)頁文件中嵌入其.class文件。運行該網(wǎng)頁,效果如下: import java.awt.*;

15、import java.applet.*;public class P10_02 extends Appletpublic void paint(Graphics g) g.setColor(Color.blue);g.drawRoundRect(45,35,250,20,10,10);g.setColor(Color.red);g.drawString(這是一個Applet!,100,50);Applet Use10.3.2 安全問題由于Java是一門安全性要求很高的語言,因此,Java Applet安全性比ActiveX要好一些,默認情況下,Java Applet的安全限制如下:1:App

16、let放在客戶端,但是不能在客戶端執(zhí)行任何的可執(zhí)行文件;2:Applet不能讀寫客戶端文件系統(tǒng)中的文件;3:在通信方面,Applet只能與它下載的源服務器進行通信,而不能與網(wǎng)絡上其他的機器通信;4:在獲取敏感信息方面,Applet只能獲取客戶端計算機的部分信息,如操作系統(tǒng)名稱和版本號、文件及路徑分隔符等,而不會泄露其他敏感信息,如注冊表、系統(tǒng)安全配置等;5:此外,Applet還可通過數(shù)字簽名進行不同的安全授權;關于數(shù)字簽名的知識,后面的章節(jié)具有詳細的敘述。因此,對Applet的安全問題,可以考慮得簡單一些。10.4 DCOM安全10.4.1 DCOM概述分布式組件對象模型(Distribute

17、d Component Object Model, DCOM),是Microsoft技術系列中推出的一種遠程組件調(diào)用模型,它的底層實現(xiàn)是基于RPC的實際上,DCOM是組件對象模型(Component Object Model, COM)的進一步擴展10.4.1 DCOM概述在DCOM體系結構中,具有兩個重要的參與者: 服務器端。服務器端實現(xiàn)具體的業(yè)務邏輯,對外提供接口,以服務的形式發(fā)布; 客戶端??蛻舳顺绦驅ο竽軌蛘埱蠓掌魃习l(fā)布的服務,調(diào)用接口,實際上調(diào)用服務器端的業(yè)務邏輯10.4.1 DCOM概述服務器端和客戶端程序可以不在同一臺機器上DCOM客戶端對服務器端的調(diào)用相對簡單,不用考慮底層網(wǎng)

18、絡協(xié)議的細節(jié)而服務器端也不需要考慮數(shù)據(jù)怎樣傳輸給客戶端,只需集中精力于業(yè)務邏輯邏輯的編寫因此,可以說DCOM為局域網(wǎng)、廣域網(wǎng)甚至Internet上不同計算機的對象之間的通訊提供了一個良好的模型。特別是對于分布式計算的情況,使用DCOM可以達到良好的效果,滿足應用的需求。另外,DCOM在配置上也比較方便??蛻舳撕头掌鞯耐ㄐ胚^程中,如果要改變兩者之間的連接或通信方式,DCOM無需改變源碼,也無需重新編譯程序,只需要改變配置即可以一個典型的遠程調(diào)用服務的項目為例,DCOM運行的基本架構為: 在該架構中,應用服務器和DCOM服務器不在同一臺機器上,兩者之間通過接口進行通信在Microsoft系列中,

19、DCOM是語言無關的,很多語言都可以用來創(chuàng)建DCOM組件,很多語言,如Java、Visual C+、VB、Delphi等也都可以很好地和DCOM發(fā)生相互作用由于DCOM的語言獨立性,應用系統(tǒng)開發(fā)人員可以選擇自己最熟悉的語言和工具來進行開發(fā)10.4.2 安全問題DCOM的安全問題主要體現(xiàn)在以下幾個方面: 1: DCOM充分使用了Windows NT提供的安全框架。因此,原則上講,在服務器端組件和客戶端,DCOM無需進行安全性設計和編碼工作,就可以為分布式應用提供安全性保障。因此,可以說,缺省情況下,DCOM提供了一個有效的安全性機制,開發(fā)人員在開發(fā)分布式應用時,不需要擔心安全問題安全問題2:對于

20、某些應用系統(tǒng),如果需要確定方法級的用戶訪問控制,則使用組件級的訪問控制列表就不夠了如一個DCOM中有兩個方法:查看事務和修改事務,這兩個方法的訪問權限由不同的用戶持有,此種情況下,安全策略為: 將所有的用戶名以及其許可和策略保存在數(shù)據(jù)庫內(nèi); 當客戶端調(diào)用一個方法時,服務器端組件獲取其用戶名,在自己的數(shù)據(jù)庫中查找有關的許可和策略; 根據(jù)客戶端的身份,服務器端組件僅僅執(zhí)行允許該客戶執(zhí)行的安全對象中的某些操作提示:用戶的許可和策略保存在數(shù)據(jù)庫中,用戶不必要為其安全性擔心,因為用到的是Windows NT內(nèi)置的安全性框架。DCOM安全問題更加深入的研究,請參考相關文獻。 10.5 EJB安全10.5.

21、1 EJB概述企業(yè)級Java Bean(Enterprise Java Bean, EJB)是sun技術系列中提供的服務器端組件模型,也可以用于部署分布式應用程序由于它具有跨平臺的優(yōu)點,在大型系統(tǒng)和對事務要求較高的系統(tǒng)中比較常見EJB是JAVA EE的一部分,基于Java技術,定義了一個開發(fā)分布式應用程序的標準10.5.1 EJB概述當軟件系統(tǒng)的規(guī)模擴大之后,傳統(tǒng)的兩層結構難于維護,而EJB的使用,促進了多層結構的發(fā)展,使得層與層之間的耦合性大大降低EJB是中間件的一種實現(xiàn)方式,和其他的中間件相比,EJB還具有如下優(yōu)點: 1:對象緩存機制。在訪問量較大,對性能要求較高的系統(tǒng)中,對象緩存機制能夠

22、大大提高系統(tǒng)性能,但是程序員如果自己編寫對象緩存機制,要考慮到很多底層的安全問題,并不容易(如要考慮線程安全和并發(fā)控制等問題),可能將其精力從業(yè)務邏輯的編寫中分散出去而EJB容器中提供了自動的對象緩存機制,無需另外編寫代碼,就可以利用服務器的特性2:事務機制。同樣,在安全性要求較高的系統(tǒng)中,事務控制關系到系統(tǒng)的穩(wěn)定,如果程序員自己編寫事務程序,也比較消耗精力,并且不容易編寫得很安全EJB提供了非常全面的事務機制,程序員只需要簡單配置事務控制策略,也不需要編寫任何代碼EJB分為3類,分別是: 會話Bean(Session Bean)。會話Bean用于實現(xiàn)業(yè)務邏輯,可以設置為有狀態(tài)的,也可以設置為

23、無狀態(tài)的; 實體Bean(Entity Bean)。實體Bean用于實現(xiàn)對象關系映射,將數(shù)據(jù)庫表中的記錄映射為內(nèi)存中的Bean對象。對Bean的實例化、刪除、修改、查詢能夠和數(shù)據(jù)庫同步; 消息驅動Bean(MessageDriven Bean)。消息驅動Bean能夠接收客戶端發(fā)送的JMS消息然后處理,實現(xiàn)異步的功能調(diào)用EJB中,組件之間也是用接口進行通信的。以EJB2.0遠程接口調(diào)用EJB對象為例,EJB的運行過程為: 關于EJB編寫的一些其他問題,讀者可以參考相關文檔10.5.2 開發(fā)安全的EJB EJB 開發(fā)過程中的安全問題體現(xiàn)在以下幾個方面: 由于EJB容器已經(jīng)提供了較好的安全保障,理論

24、上講,EJB 的業(yè)務方法源代碼中,不應該包含與安全相關的邏輯EJB可以提供對受保護資源的受控訪問。對于組件級別的授權和身份驗證,可以在EJB打包時的部署描述符中配置EJB中允許設置其安全角色,部署EJB時,將安全角色映射到安全標識(如用戶標識或用戶組等),這樣可以批量設置對某些資源的訪問。安全角色通常也在部署的描述符中配置以下例子中指定了兩個安全角色:customer和admin: . customer customer admin admin . 4:EJB中允許聲明調(diào)用某個方法的權限,來確定某些方法只能由某些角色調(diào)用。該聲明也是在部署描述符中進行: 上面的配置說明,customer角色可以

25、訪問CustomerService內(nèi)的所有方法,能訪問PayService中的getBalance方法。 customer CustomerService * PayService getBalance 5:在EJB中,也可以利用編程的方法來實現(xiàn)安全管理EJB 層中的編程安全方法由context調(diào)用,主要包括以下方法:getCallerPrincipal:返回java.security.Principal 對象,封裝了EJB的調(diào)用者;可以用Principal 的getName方法得知用戶名; isCallerInRole:傳入一個用戶名,返回一個布爾類型的變量,用于確定調(diào)用者的角色10.6 C

26、ORBA安全10.6.1 CORBA概述公共對象請求代理體系結構(Common Object Request Broker Architecture,CORBA)是一種標準的面向對象應用程序體系規(guī)范CORBA由對象管理組織(Object Managemnet Group, OMG)組織制訂,是OMG為解決分布式處理環(huán)境中,不同平臺、不同語言甚至不同硬件系統(tǒng)的之間的通訊而提出的一種解決方案提示:OMG組織是一個國際性的非盈利組織,其職責是制訂工業(yè)指南和對象管理規(guī)范,為應用開發(fā)提供一些公共框架。CORBA實際上是由對象管理組織設立一組編程標準。在這個標準中,定義了一系列API和通信協(xié)議,用于達到以下目標: 不同語言編寫的應用程序可以通信; 不同平臺下的應用程序可以通信; 對于編程人員來說,通信的底層細節(jié)是封裝起來的;等等Corba實際上實現(xiàn)了不同語言之間的通信在編寫程序的過程中,Corba中提供了IDL編譯器,能夠將不同語言編寫的程序轉換成統(tǒng)一的IDL接口進行發(fā)布,IDL接口之間可以實現(xiàn)通信。以Java客戶端和C+服務器端進行通信為例,下圖展示了其通信過程:CORBA標準主

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論