`
jayyanzhang2010
  • 浏览: 377829 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

IE浏览器中如何安全地调用本地可执行程序

 
阅读更多

目前在Internet上的应用均采用客户服务器模型,客户提出请求,服务器作出应答,即所谓请求应答模式,使用最广的是客户端为浏览器的B/S模式。通常,浏览器中是禁止运行本地可执行程序的。但不允许浏览器运行,客观上限制了浏览器的用途和作用。要解决此问题,必须安全扩展浏览器的功能。扩充浏览器的功能,一是采用控件或插件技术,二是采用小程序技术。市场上的主流浏览器,如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字处理软件,在页面中插入如下的代码和脚本程序,即可启动。不要忘了容错处理,即系统中未安装可执行程序的情况下,也要保证浏览器流畅运行。

<object classid=“clsid:D7D397BA—55D3—45FA—9BF4—
F7A30C311F1A”,id=“YxmLocalCall”,codebase=“http://www.
mir.gov/new—hp/yxmLocalCall.cab#version=2,0,0,0”>
<param name=“Version”,value=“65536">
<param name=“ExtentX”,value=“2646">
<param name=“—ExtentY”,value=“1323">
<param name=“—StockProps”,value=“0”>
<param name=“exeKey”,value=“wlnword.exe”>
</object>
<script>
YxmLocalCall.exekey=“winwOrd.exe”;
YxmLocalCall.localCall();
</script>

上述代码中的clsid就是前面所述的控件标识符,不同的控件有不同的取值,相同功能不同版本的控件也有不同的取值.

分享到:
评论

相关推荐

    ie浏览器 js调用 ocx 异步打印pdf、图片控件

    在IE浏览器中,由于其对ActiveX的支持,可以安全地加载和运行这个控件。 然后,注册OCX控件至关重要。这通常通过管理员权限的命令行完成,使用`regsvr32`命令来注册OCX文件,使得浏览器能够识别并调用该控件。确保...

    浏览器调用本地EXE,试用于谷歌浏览器

    标题中的“浏览器调用本地EXE,试用于谷歌浏览器”是指一种技术,允许谷歌浏览器(Google Chrome)通过特定的方式启动本地的可执行文件(.exe程序)。这种技术通常用于扩展浏览器的功能,或者实现某些定制化的交互...

    IE启动本地程序

    这个功能允许网页通过JavaScript或其他客户端脚本语言来调用本地计算机上的可执行文件,从而实现用户在浏览网页时能够便捷地启动如QQ、淘宝旺旺等常用程序。以下将详细阐述这一技术的实现原理、安全性和相关的编程...

    其他浏览器调用Ie浏览器.rar

    总的来说,“其他浏览器调用Ie浏览器.rar”是一个解决特定问题的工具,它让现代浏览器用户在必要时能够方便地启动IE,并控制其打开特定的网页。对于开发者而言,这是一个深入了解浏览器间交互、Windows API使用以及...

    QT内嵌IE浏览器

    QT内嵌IE浏览器是一种在QT应用程序中集成Internet Explorer(IE)控件的技术,这使得开发者能够在QT界面中展示网页内容,实现与Web交互的功能。QT是Qt Company开发的一个跨平台的C++图形用户界面应用程序开发框架,...

    ActiveX获取PC硬件信息,IE浏览器

    ActiveX控件是小型可执行程序,能够执行特定的任务,如访问硬件设备、读取系统信息等。本文将深入探讨如何利用ActiveX在IE浏览器中获取PC的硬件信息。 首先,ActiveX控件可以访问本地文件系统。通过调用特定的API...

    WebBrowser中JS和C++代码互相调用

    在Windows编程领域,WebBrowser控件是一个非常实用的组件,它允许开发者在应用程序中嵌入一个基于Internet Explorer渲染引擎的浏览器。这篇博客的配套文件主要探讨了如何在WebBrowser控件中实现JavaScript(JS)与...

    网页采用命令行方式调用exe

    1. **ActiveXObject**:在Internet Explorer浏览器中,可以使用ActiveXObject对象来创建并访问COM组件,从而调用本地的可执行文件。以下是一个简单的示例: ```javascript var shell = new ActiveXObject("WScript....

    COM接口调用IE工作的例子

    在“COM接口调用IE工作的例子”中,我们的目标是利用IE浏览器作为工具,完成数据处理任务。IE提供了一组称为“WebBrowser”对象的COM接口,允许开发者在代码中控制浏览器的行为,例如导航到特定URL、加载HTML、执行...

    在网页上调用桌面exe程序的简单方法

    ActiveXObject是微软引入的一种JavaScript对象,它允许在IE浏览器(部分其他浏览器可能也支持)中创建ActiveX控件的实例。ActiveX控件是一种在Windows平台上运行的组件,可以提供各种功能,包括调用桌面程序的功能。...

    易语言源码易语言删除IE浏览记录源码.rar

    1. 检查IE浏览器的安装路径:由于不同用户的安装位置可能不同,程序需要能够找到IE的可执行文件。 2. 执行清理命令:使用`ShellExecute`函数调用IE的命令行参数,以启动浏览器并触发清理操作。 3. 删除注册表项:...

    js调用ocx插件

    但通过ActiveXObject,IE浏览器提供了一种方式来访问和控制COM对象,OCX插件就是基于COM的。因此,只有在Internet Explorer中,我们可以利用这个特性来调用OCX控件。 以下是实现JS调用OCX插件的基本步骤: 1. 创建...

    javasctipt调用OCX文件例子

    JavaScript调用OCX(ActiveX控件)是Windows平台下的一种技术,主要用于在网页或Web应用程序中集成特定的系统功能,比如与本地数据库交互、访问硬件设备等。在这个例子中,我们将探讨如何通过JavaScript实现这一目标...

    华旭金卡WEB调用示例

    用户需要在IE浏览器设置中启用ActiveX控件,才能在网页上调用华旭金卡的读卡功能。 文档方面,我们有两个用户手册——"华旭二代证接口动态链接库用户手册.doc"和"华旭二代证接口控件用户手册.doc"。动态链接库(DLL...

    代替OCX Activex 等IE插件的方式

    因此,寻找替代方案来实现在网页中调用本地插件处理数据变得尤为重要。本文将详细介绍一种利用HTTPS跨域请求本地服务器的方式来替代OCX ActiveX插件,该方法支持Windows 7及以上系统,并兼容IE11和最新版的Chrome与...

    IE js调试工具 companionjs

    总之,CompanionJS是IE浏览器环境下进行JavaScript调试的强大助手,它的存在使得开发者无需惧怕IE的兼容性挑战,可以更高效地调试和优化代码,提高开发效率。熟练掌握其使用技巧,将极大地提升你在IE平台上的开发...

    IEDriverServer_x64_3.150.2.zip

    这个可执行文件负责处理来自WebDriver的请求,并将其转化为对IE浏览器的本地调用。 详细知识点: 1. **Selenium WebDriver**:Selenium是一个强大的Web应用程序自动化测试工具,它支持多种浏览器,包括Chrome、...

    chrome ie tab14.4.8.1

    这个扩展对于那些需要使用仅在IE浏览器上运行的Web应用程序或者网站的用户来说非常有用。由于某些网页可能依赖于IE特有的技术或组件,而这些在Chrome中不被支持,Chrome IE Tab便提供了这样一个解决方案。 描述中...

    dll+activex+web简单例子(vs2005可运行)

    在IT行业中,动态链接库(DLL)和ActiveX控件是两种常见的技术...在实际开发中,需要注意兼容性问题,因为ActiveX主要是在IE浏览器上工作,而现代Web应用更多地依赖于跨平台的Web标准,如WebAssembly或Web Components。

    winform打开一个新程序 - - 博客频道

    标题与描述均提到了“winform打开一个新程序”,这主要涉及了在Windows Forms应用程序(简称Winform)中,如何利用C#编程语言调用外部程序或文件的技术。这一技术在开发过程中非常实用,比如当需要在应用内触发外部...

Global site tag (gtag.js) - Google Analytics