ActiveX
此条目需要精通或熟悉相关主题的编者参与及协助编辑。 (2013年8月15日) |
原作者 | Microsoft |
---|---|
开发者 | Microsoft |
首次发布 | 1996年 |
网站 | microsoft |
ActiveX在广义上是指微软公司的整个COM架构,但是现在通常用来称呼基于标准COM接口来实现对象链接与嵌入(OLE)的ActiveX控件。[1]后者是指从VBX发展而来的,面向微软的Internet Explorer技术而设计的以OCX为扩展名的OLE控件。通过定义容器和组件之间的接口规范,如果编写了一个遵循规范的控件,那么可以很方便地在多种容器中使用而不用修改控件的代码。同样,通过实现标准接口调用,一个遵循规范的容器可以很容易地嵌入任何遵循规范的控件。由于OLE在ActiveX控件中的应用的普及,现在OLE技术中只有少数独立于ActiveX技术,例如复合文档。
简介
[编辑]一些浏览器,例如Internet Explorer、Google Chrome、网景浏览器等等现在或曾经都在不同程度上支持ActiveX控件。这允许网页通过脚本和控件交互产生更加丰富的效果,同时也带来一些安全性的问题。Internet Explorer和一些其他应用程序同时支持ActiveX Documents接口规范,允许在一个应用程序中嵌入另一个支持这个规范的应用程序。很多应用软件,例如微软的Microsoft Office系列和Adobe的Acrobat Reader都实现了这个规范。
服务器端ActiveX组件通常是指运行在服务进程中的组件。一个典型应用是在IIS中运行的ASP脚本创建的ActiveX Data Objects,也称ADO。 市场上有很多开发工具支持开发和使用ActiveX控件。
ActiveX Documents泛指一般采用ActiveX技术作为接口所使用的文件,最早始于2000年左右,当时由于互联网的兴起,当时的软件巨擘微软为打败当时崛起的浏览器Netscape所使出策略,当时市场处于弱势的IE想要将当时微软市占率最高的office文件应用于IE上,好打败Netscape,故使出让IE浏览器不需将Office的文件转换成标准的HTML网页也能读取甚至修改编辑,因此2000后的IE均提供直接开启ActiveX Documents(如.doc.ppt...等扩展名)之文件,这项策略果然在数年后,将Netscape完全逐出市场。而由于Office的文件只有微软能解读,因此后来的浏览器如Google的Chrome就不能直接打开如PPT或DOC等文件,不过随着云计算的兴起,相信这情况将会改变。
运作原理
[编辑]- 使用ActiveX组件
- 每一个ActiveX组件都各自用一个唯一的GUID编码在登录信息的
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\
[2]与HKEY_CLASSES_ROOT\CLSID\
之处注册其DLL文件路径。多个ActiveX组件可以放在同一个dll文件内,但是所有开放使用的ActiveX组件都必须以各自的GUID编号登记在登录信息里。 - 当该ActiveX组件的dll档,使用LoadLibrary[3]或LoadLibraryEx[4]的API加载后,以GetProcAddress[5]获取DllGetClassObject[6]这个定义在该dll档里的函数的进入点。
- 接着调用DllGetClassObject,以获取IClassFactory[7]的指针。
- 再经由IClassFactory去CreateInstance[8],进行该ActiveX组件初始化的后续操作。
安全性
[编辑]由于Microsoft在Windows内置许多ActiveX,因此导致一些恶意的网站曾经利用这些ActiveX进行自动安装病毒或后门。 例如:
- Scripting.FileSystemObject,这个ActiveX可操作新增或修改文件内容。[9]
- WbemScripting.SWbemLocator,这个ActiveX可操作WMI,进而访问登录信息。[10]
- WScript.Shell,这个ActiveX可从浏览器之中直接执行外部的可执行文件。[11]
因此,Microsoft陆续在IE上增加2种屏蔽ActiveX执行的方法。先是在2007年加上ActiveX兼容性旗标(Killbit)功能,经由ActiveX组件开发厂商的向Microsoft回报后,由Windows Update发布KillBit的更新。而后又在IE 9以后的版本加上ActiveX Filtering功能,让IE的浏览者能够自定义是否屏蔽特定的ActiveX组件。[12]
淘汰
[编辑]在2015年7月29日发行的Windows 10,会以不支持ActiveX的Microsoft Edge浏览器[13],取代使用多年的Internet Explorer做为Windows默认浏览器。但为兼容性需要,Windows 10仍内置Internet Explorer 11供用户选用。
参考资料
[编辑]- ^ Introduction to ActiveX Controls. [2013-08-15]. (原始内容存档于2013-09-27).
- ^ CLSID Key. [2013-08-16]. (原始内容存档于2013-09-21).
- ^ LoadLibrary function. [2013-08-16]. (原始内容存档于2016-06-14).
- ^ LoadLibraryEx function. [2013-08-16]. (原始内容存档于2013-07-22).
- ^ GetProcAddress function. [2013-08-16]. (原始内容存档于2013-07-31).
- ^ DllGetClassObject entry point. [2013-08-16]. (原始内容存档于2013-10-18).
- ^ IClassFactory interface. [2013-08-16]. (原始内容存档于2019-09-19).
- ^ IClassFactory::CreateInstance method. [2013-08-16]. (原始内容存档于2019-09-19).
- ^ Programming the FileSystemObject. [2013-08-15]. (原始内容存档于2013-08-07).
- ^ SWbemLocator object. [2013-08-15]. (原始内容存档于2013-05-11).
- ^ Run Method (Windows Script Host). [2013-08-15]. (原始内容存档于2013-08-07).
- ^ How to use Tracking Protection and ActiveX Filtering in Internet Explorer 9. [2013-08-15]. (原始内容存档于2013-08-15).
- ^ Gregg Keizer. Microsoft nixes ActiveX add-on technology in new Edge browser. www.computerworld.com. 10 May 2015 [2016-04-23]. (原始内容存档于2015-05-14).