IE瀏覽器中如何安全地調用本地可執行程序
通常,瀏覽器中是禁止運行本地可執行程序的。但不允許瀏覽器運行,客觀上限制了瀏覽器的用途和作用。要解決此問題,必須安全擴展瀏覽器的功能。擴充瀏覽器的功能,壹是采用控件或插件技術,二是采用小程序技術。市場上的主流瀏覽器,如IR和Netscape均支持這兩種技術。控件或插件多用VC、BC++、VB和Delph等語言開發。小程序壹般是由,iava語言來編程的。眾所周知,java語言通過“砂箱”機制禁止訪問本地文件系統,更談不上調用本地程序運行,要通過瀏覽器調用本地可執行程序,需使用控件或插件技術。壹、安全調用本地程序的要求瀏覽器中調用本地程序起碼要解決兩個問題,壹是安全性,二是位置透明性。 由於瀏覽器運行在客戶端,安全性非常重要,如果安全性不能解決,運行在瀏覽器中的惡意控件輕則可能傳播病毒、破壞本地文件系統,重則造成計算機系統癱瘓和信息泄密。瀏覽器中均有默認的安全級別,IE瀏覽器默認的是中級安全級別。在此安全級別下要讓瀏覽器啟動運行本地可執行程序.壹早要杷榨件標記為可安全執行的。二是要對控件做數字簽名。把控件標記為可安全執行的含義是要在控件中實現必需的Iknown接口外,還要實現“對象安全”接口,這樣控件才能與瀏覽器協調壹致的工作。對控件做數字簽名就是采用非對稱加密算法將散列函數處理後的控件散列值做加密,以保證控件的完整性和不可否認性。如果對控件不做安全標記,也不進行數字簽名,要想在本地運行可執行程序,就必須降低瀏覽器的安全性。瀏覽器的安全性降低後,對於內部網絡似乎問題不是很大,但要在internet上,那就給病毒、黑客人侵打開了方便之門。除非有充足的理由,壹般情況下,決不可隨便降低瀏覽器的安全性。 所謂位置透明性就是運行可執行程序與位置無關,無論其放在何處都能正常運行。位置透明性對寫過控件的人並不陌生,Windows中無處不在,控件無壹例外都是位置透明的。其解決辦法是使用壹個128位的clsid來唯壹標識。clsid在HTML頁面中和系統的註冊表中隨處可見。在使用控件時,無論是手工還是系統自動註冊都是在註冊表中建立clsid和控件路徑的映射關系。通過這種映射關系自動解決了位置透明性。 我們也可通過註冊表解決運行程序的位置透明性問題。這裏的映射關系可建立成應用程序名和可運行程序路徑之間的映射關系。用應用程序名來唯壹地標識可執行程序,其相當於控件的cMd,用安裝程序來安裝可執行程序,相當於控件註冊。Windows中通過安裝程序安裝的可執行程序,其鍵值均在HKEY_LOCAlMACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\中,用流行的的InstallShield安裝軟件不難實現。調用本地可執行程序時在註冊表中查找其安裝路徑,結合應用程序名和註冊表鍵值中記錄的執行程序路徑,即可找到本地可執行程序,原理與控件的動態加載運行完全壹致。二、實現機理 用支持控件的開發工具,如VC、VB等開發壹個調用本地可執行程序的控件,可命名為Cyxm—LocalCallCtrl,除了實現必需的Iknown接口外,還要實現IObjectSafety接口,即前面提到的“安全對象”接口。再實現壹個調用本地可執行程序的函數,如localCall(),開發完成後對控件做數字簽名就可使用了。1.IObjectSafety接口該接口的核心是以下的兩個函數:STDMETHODIMP CYxmLocalCallCtrl::XObjectSafety::GetInterfaceSafetyOptions(REFIID riid,DWORD——RPC—FAR*pdwSupportedOptions,DWORD——RPC—FAR*pdwEnabledOptions),STDMETHODIMP CYxmLocalCallCtrl::XObjectSafety::Set—InterfaceSafetyOptions(REFIID riid,DWORD dwOptionSetMask,DWORD dwEnabledOptions) 這兩個函數只是用對象嵌套的方式實現的壹個樣例,如果用對象聚合的方式實現它,可能不是這個樣子,但接口參數和函數名是不會發生變化的。對這兩個函數的編碼並不復雜,如果妳不需要做什麽,其函數體可以不用寫任何代碼,簡單地返回就可以了。之所以寫這兩個函數是瀏覽器的要求,其加載控件時,要調用這兩個函數,也就是瀏覽器要求妳承認妳寫的控件是安全地。這是前面所述標記為安全腳本的技術含義。其實IE瀏覽器支持的接口很多,如IDispatch、IHTML-Document2、IHTMLDocument、IHTMLCollection、I-HTMLFormElement、IHTMLInputTextElement等等。擴充其功能都是通過實現它們完成的。如有些文章中介紹的通過IE瀏覽器竊取網頁中的用戶名和密碼也是利用這種原理。2.數字簽名 對控件做數字簽名首先要制作數字證書,數字證書可從數字認證中心申請得到。如果不想付費,而自己的網絡又無數字認證中心,可用VC提供的工具來完成。具體做法是,用MakeCert.Exe制作數字證書,用CabArc.Exe制作壓縮包,用signcode.exe進行數字簽名。完成數字簽名後,將控件部署到web中,即可使用。3.使用控件 如果想通過瀏覽器調用word.exe字處理軟件,在頁面中插入如下的代碼和腳本程序,即可啟動。不要忘了容錯處理,即系統中未安裝可執行程序的情況下,也要保證瀏覽器流暢運行。