ActiveX是Microsoft對于一系列面向?qū)ο蟪绦蚣夹g(shù)和工具的稱呼,其中主要的技術(shù)是組件對象模型(COM)。ActiveX控件是Microsoft為抗衡Sun的JAVA技術(shù)而提出的,功能和JAVA applet功能類似。在Windows系統(tǒng)中,有一些以O(shè)CX結(jié)尾的文件。OCX代表"對象鏈接與嵌入控件"(OLE),用于處理桌面文件的混合使用。現(xiàn)在COM的概念已經(jīng)取代OLE的一部分,Microsoft也使用ActiveX控件代表組件對象。組件的最大優(yōu)點(diǎn)就是可以被大多數(shù)應(yīng)用程序再使用(這些應(yīng)用程序稱為組件容器)。使用ActiveX控件可快速實現(xiàn)小型的組件重用、代碼共享,從而提高編程效率,降低開發(fā)成本。大家小時候都玩過七巧板和積木,用簡單的形狀就能構(gòu)造出我們所能想象出的各種千奇百怪的物體,編程也是這樣,組件就好比積木塊,我們把組件按不同的方式組合起來,就能實現(xiàn)單個程序達(dá)不到的功能。ActiveX控件運(yùn)行在客戶端。通過它,我們可以獲得客戶端的一些信息,如IC卡的信息,客戶端的驗證等,同時,它也可以在我們?yōu)g覽網(wǎng)頁時,得到更多的功能體驗,比如觀看Flash動畫、欣賞電影、歌曲等等。但是ActiveX控件也有許多缺點(diǎn),最大的缺點(diǎn)是客戶端的部署很困難,如客戶端不能正確下載,下載了以后不能正確執(zhí)行,下載的時候需要設(shè)置IE的安全級別等等,這也是我行網(wǎng)銀使用中客戶咨詢的熱點(diǎn)。另外一個缺點(diǎn)就是由于ActiveX控件可被黑客用來放毒,所以大多數(shù)安全類軟件都會對其嚴(yán)防死守,這也給我行的控件安裝帶來了很大的影響。為了幫助大家解決控件安裝使用中的一些問題,我將從以下幾方面對控件做一個簡單的介紹。
控件的工作原理在介紹控件之前,有必要先來講一下GUID。 在生活當(dāng)中,很多事物都可以用一個編號來進(jìn)行標(biāo)識,汽車可以用號牌來標(biāo)識,網(wǎng)卡可以用MAC地址來標(biāo)識,而人也可以用身份證號來標(biāo)識,那么在軟件世界,面對不同的國家、不同的廠商以及他們所開發(fā)出來的不同的組件、不同的接口,我們怎么來標(biāo)識呢?我們是用一個GUID結(jié)構(gòu)來標(biāo)識不同的對象、組件及接口的,GUID是英文globally unique identifier(全球唯一標(biāo)識符)的首字母縮寫,它是微軟使用的一個術(shù)語,通過特定的算法,它可以給某一個實體創(chuàng)建一個唯一的標(biāo)識,并且此標(biāo)識符是全球唯一的。 一個GUID共有128位長(16字節(jié)),形如XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX。其中每個X是0-9或A-F范圍內(nèi)的一個十六進(jìn)制的數(shù)字。根據(jù)定義,GUID在時間和空間上都是唯一的。為保證空間唯一性,每一個GUID需要一個對于生成它的計算機(jī)來說是單一的48位值。這個值一般就是機(jī)器所裝網(wǎng)卡的地址。使用這個值可以保證不同的機(jī)器上所生成的GUID值是不相同的。為保證時間上的唯一性,每一個GUID值具有一個60位的時間戳。這個時間戳表示自1852年10月15日00:00:00.00以來以100納秒為間隔的記數(shù)值。根據(jù)目前的算法,可保證到公元3400年GUID值仍然是唯一的。 GUID的使用非常廣泛,我們平時經(jīng)??吹剑缱员?、類及接口標(biāo)識、數(shù)據(jù)庫、以及自動生成的機(jī)器名、目錄名等,你可以打開你的系統(tǒng)盤下的\WINDOWS\Installer目錄,可以看到很多類似{0A869A65-8C94-4F7C-A5C7-972D3C8CED9E}的文件夾,這就是系統(tǒng)自動生成的目錄名。至于注冊表中更是到處都是它的影子。 當(dāng)我們?yōu)g覽網(wǎng)頁時,控件是如何下載并安裝到我們的計算機(jī)上的?為了弄清楚這個問題,先來看下面的一段網(wǎng)頁代碼。 <object id="safeSubmit1" classid="CLSID:8D9E0B29-563C-4226-86C1-5FF2AE77E1D2" codebase="/icbc/newperbank/AxSafeControls.cab#version=1,0,0,6" style="HEIGHT: 0px; WIDTH: 0px" VIEWASTEXT> </object> 這段代碼是我行個人網(wǎng)銀登錄頁面中的一部分,object元素表示將向網(wǎng)頁文件中插入一個對象,classid屬性是該對象的類標(biāo)識,它的值形如"CLSID:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",表明這是一個ActiveX控件。codebase屬性是該控件的URL地址,它指向一個cab文件,這個文件是控件開發(fā)商打包發(fā)行的,里面是控件的執(zhí)行文件,有.dll文件、.ocx文件、.exe文件等,為了能夠自動安裝和注冊控件,一般還有INF文件來記錄相關(guān)的一些安裝信息。"1,0,0,6"是服務(wù)器上該控件的版本號。系統(tǒng)會根據(jù)classid先到注冊表中去查詢,查詢該控件的安裝及版本信息,查詢路徑是"HKEY_CLASSES_ROOT\CLSID\{8D9E0B29-563C-4226-86C1-5FF2AE77E1D2}\",如果鍵值不存在,則控件需要新安裝,如果鍵值存在但版本號小于服務(wù)器上的版本號,則會更新控件。 以上面的例子說明,當(dāng)瀏覽器解析出object元素時,IE會按照以下流程進(jìn)行處理:
好了,到這里,一個組件實例就生成了。這個過程我寫得比較簡單,大家如果有興趣,可以看些軟件開發(fā)類的書籍,大多數(shù)人只要清楚大概的流程就行了。 控件安裝前的IE瀏覽器設(shè)置為了能夠順利下載和安裝ActiveX控件,我們需要對IE瀏覽器做必要的設(shè)置,特別是安全級別,安全級太高,很多控件都不可能正常下載,即使下載了也無法安裝,安全級太低,又容易引起很多安全問題。那怎樣設(shè)置才合理呢,我的建議是添加信任站點(diǎn),將一些銀行網(wǎng)站、支付寶等加入信任站點(diǎn),然后將信任站點(diǎn)的安全級別設(shè)為"低",把控件的有關(guān)選項全部"啟用",而Internet域的安全級別可設(shè)置得高一點(diǎn),這樣,我們就既可以有針對性的安裝需要的控件,又可以防止一些惡意控件帶來的安全問題。具體地設(shè)置步驟,大家可以參考這里。 控件的安裝一般來說,只要IE設(shè)置正確,那么控件會自動下載并安裝,除非你的防火墻和殺毒軟件等對它進(jìn)行了攔截,現(xiàn)在大多數(shù)的病毒和木馬是在我們?yōu)g覽網(wǎng)頁時下載和傳播的,殺毒軟件對控件防范還是很嚴(yán)密的,如果總是安裝不成功,可能得考慮將殺毒軟件和防火墻關(guān)閉了。關(guān)于瀏覽網(wǎng)頁時安裝控件的操作過程,大家可以參考一下在瀏覽網(wǎng)頁時如何安裝控件。 控件的注冊對于應(yīng)用軟件來說,一般都有一個安裝程序,在用戶執(zhí)行安裝程序時,ActiveX控件將自動在用戶機(jī)器上安裝并注冊。 對于IE來說,在安裝控件的時候,它也會自動地進(jìn)行注冊。 對于從網(wǎng)上下載的一些控件,要想使用它們,得手工注冊后方可使用,還有一些控件,由于注冊信息遭到破壞,無法正常使用時,我們也需要手工注冊。這個過程可以通過執(zhí)行Regsvr32.exe文件來完成。 Regsvr32.exe位于\Windows\System目錄(Windows Me/Windows 98/Windows 95)或者\Windows\System32目錄(Windows NT/Windows XP/Windows Vista),是32位系統(tǒng)下使用的DLL注冊和反注冊工具,使用它必須通過命令行的方式使用。它的使用語法如下: Regsvr32 [/u] [/n] [/i[:cmdline]] dllname /u - 反注冊DLL文件。 /i - 調(diào)用DllInstall時將它傳遞到可選的[cmdline];在與/u共同使用時, 它卸載DLL文件。 /n - 不調(diào)用DllRegisterServer,它必須與/i連用。 /s - 安靜模式,即在注冊/反注冊時不顯示結(jié)果提示框。(Windows XP和 Windows Vista中加入) dllname - 指定要注冊的DLL文件名。 輸入DLL文件名時,如果是非系統(tǒng)文件,必須使用文件絕對路徑,文件路徑中不包含中文,否則很可能導(dǎo)致處理失敗。如果regsvr32不能正常執(zhí)行,很可能系統(tǒng)文件遭到破壞,因為使用regsvr32.exe時會調(diào)用Kernel32.dll、User32.dll和Ole32.dll三個文件,在DOS模式或其它系統(tǒng)替換正常文件即可解決。 控件的禁用有時我們根據(jù)需要,不希望某些控件運(yùn)行,這時我們就需要對相關(guān)控件進(jìn)行禁用,禁用控件很簡單,可以在IE中設(shè)置,也可以直接在注冊表中設(shè)置。 在IE中禁用控件,打開Internet選項,單擊程序選項卡,單擊管理加載項,這里列出了IE中加載的所有控件,我們選中需要禁用的控件,選擇禁用就行了。 我們將網(wǎng)銀輸入控件禁用后,大家可以看一下結(jié)果。 除了在IE中設(shè)置外,我們也可以在注冊表中進(jìn)行控件的禁用。打開注冊表編輯器,進(jìn)入路徑"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Ext\Settings\",下面已經(jīng)有一些控件了,我們可以試著增加一條,點(diǎn)擊Settings,新建一個項,就輸入"{73E4740C-08EB-4133-896B-8D0A7C9EE3CD}"吧,在該鍵值下,我們新建兩個值,一個是"Flags",類型是"DWORD",值為"1",一個是"Version",類型是"字符串",值為"*"。好了,大家再登錄一下網(wǎng)銀試試看。 有時我們一打開某個網(wǎng)頁,IE就提示"非法關(guān)閉",這很可能是因為該網(wǎng)頁加載的控件被破壞,這時,我們可以將已加載的控件逐個禁用,來找到出現(xiàn)問題的控件,然后將之刪除或者重新安裝,解決IE的故障。 控件的免疫不知你有沒有遇到過這種事,無論你把控件安裝程序執(zhí)行多少遍,控件始終不起作用,網(wǎng)銀也用不了,這時很多人都會選擇重裝系統(tǒng)。其實,這個問題很好解決,原因也很簡單,控件可能被殺毒軟件給免疫了,我們只需要解除免疫,就可以解決這個問題。控件免疫和控件禁用是不一樣的,控件禁用后,我們還可以在IE瀏覽器中看到這個控件,并且可以啟用它,然而控件一旦被免疫,那么IE瀏覽器就對它完全視而不見,根本不會去理它。 不管控件是被禁用,還是被免疫,現(xiàn)象都是一樣的。 那么怎樣才能對控件實行免疫呢?方法跟控件禁用差不多,我們還是要先弄清楚目標(biāo)控件的CLSID,這是一個GUID值,千萬不能搞錯了,最穩(wěn)妥的方法當(dāng)然是咨詢控件開發(fā)商,可這不太現(xiàn)實,那我們只好自已找了,一般而言,我們可以通過搜索注冊表中HKEY_CLASSES_ROOT\CLSID路徑下的ProgID鍵值來確定控件的CLSID。有了這個值就好辦了,比如我們要免疫網(wǎng)銀輸入控件,打開注冊表編輯器,進(jìn)入路徑"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility",在該鍵值下增加一項,輸入"{73E4740C-08EB-4133-896B-8D0A7C9EE3CD}",在該項下,我們新建一個DWORD類型的值,名字叫"Compatibility Flags",值為"0x00000400"(十進(jìn)制為1024)。這樣,我們就將網(wǎng)銀輸入控件給免疫了。免疫后,只要不啟用IE中的"對未標(biāo)記為安全的ActiveX控件初始化并執(zhí)行腳本"選項,IE就不會調(diào)用該控件。 將"Compatibility Flags"的值修改為"0",哈哈,該控件就解除免疫了。為了安全起見,除非你確實沒有辦法了,可以按照這個方法來分析解決控件安裝的問題,對于新手而言,最好還是使用相關(guān)工具。 控件的卸載和刪除控件如果不再使用了,我們需要將其從系統(tǒng)中刪除,大家可以按照以下流程來完成刪除工作。
如果你要嘗試刪除的ActiveX控件當(dāng)前在內(nèi)存中由IE或"活動桌面"組件加載,會顯示"共享沖突"的錯誤信息,要解決此錯誤消息,可以按照下列步驟操作:
控件的安全性ActiveX控件盡管增加了我們上網(wǎng)沖浪時的樂趣,與此同時,它也給我們埋下了巨大的安全隱患,它是一種極其危險的提供功能的方法(目前正在被MS逐漸冷落),因為它是一種組建對象模型(COM)的對象,只要電腦的用戶可以完成的任務(wù),它都可以完成。比如它可以存取注冊表,可以隨意訪問本地文件系統(tǒng)等等。一個網(wǎng)頁上面的控件一般有2種不安全的狀態(tài),一種是腳本的不安全,一種是初始化的不安全。當(dāng)用戶將一個壓縮解壓縮空間指向一個遠(yuǎn)程被壓縮的包含特洛伊木馬的系統(tǒng)文件并且需要控件來解壓縮這個文件時,系統(tǒng)安全會被打破。這個狀態(tài)就是初始化的不安全。從代碼的角度來講,如果控件從IPersist派生,也就是說控件實現(xiàn)了永久性,那么就會觸發(fā)unsafe for initializing。而在腳本程序安全執(zhí)行以前,一個控件依賴于特定的系統(tǒng)設(shè)置,那么在允許這段代碼運(yùn)行之前控件的開發(fā)人員需要提供一些必要的代碼。這意味著如果控件從IDispatch派生,也就是說控件支持腳本,那么就會觸發(fā)unsafe for scripting。 從用戶下載一個ActiveX控件開始,這個控件就很容易被攻擊,因為網(wǎng)絡(luò)上任何網(wǎng)絡(luò)程序都可以使用它,無論是出于友好的目的還是惡意的目的。因此IE瀏覽器總是試圖彈出一個對話框來告訴你,這個控件可能是不安全的。這幾乎總是一個很好的預(yù)防網(wǎng)絡(luò)攻擊的好方法,但是對于那些我們認(rèn)為總是安全的控件,我們?nèi)匀灰邮苓@種IE產(chǎn)生的干擾,這就使人厭煩了。為了解決這個問題,開發(fā)商可以采用軟件簽名技術(shù)。但代碼簽名證書價格不菲,不是一般人用得了的,同時,即使ActiveX控件具有有效的數(shù)字簽名,在計算機(jī)上安裝這些ActiveX控件時也應(yīng)該謹(jǐn)慎。關(guān)于控件的安全性,涉及很多技術(shù)問題,這里就不多討論了,有興趣的朋友可以參考一下文章《為什么基于ActiveX的安全控件一定是不安全的》。 |
|