SafeCtl.exe ActiveX 控件中实现 IObjectSafety

文章翻译 文章翻译
文章编号: 164119 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

SafeCtl.exe 示例演示如何修改以指示用户已发布代码基于 MFC 的 ActiveX 控件和是否控件已被篡改。该示例可以帮助确定控件是否可安全执行脚本和安全的初始化。

更多信息

以下文件是可从 Microsoft 下载中心下载:
SafeCtl.exe
有关如何下载 Microsoft 的支持文件的详细信息单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
119591如何获取 Microsoft 的支持文件从联机服务
Microsoft 扫描此文件的病毒。Microsoft 使用该文件已过帐的日期上获得的最新病毒检测软件。该文件存储在安全增强型服务器上,这有助于防止未经授权的情况下对其进行更改,对该文件。

用户可以将 ActiveX 控件的窗体中的代码添加到他们的 Web 页在 Internet 浏览器 3.0 和更高版本。若要指定一个控件使用 <object>标记。创建控件的实例后,可以通过控件的持久性接口设置其属性。例如对于 Internet Explorer 在分析 HTML 页时遇到一个 <object>标记的上下文中每个 <param>标记 Internet Explorer 将传递到相应控件的一个属性包IPersistPropertyBag 接口。此外,可以通过在页中嵌入的执行方法并修改属性通过控件的自动化接口表现出来的脚本使用的自定义控件的行为。

验证码代码签名技术使确定代码的发行商,并验证没有人有篡改该代码签名后的最终用户。它并不保证代码是安全的其属性使用不受信任的值的初始化时或当其自动化模型由不受信任的脚本。若要避免此类潜在的安全 hazards,默认 Internet Explorer 安全设置,它是通过 Internet Explorer 选项安全 选项卡可访问属性表,要求控件注册为实施相应的组件类别,或在控件实现 IObjectSafety 接口。该示例说明了两个。

它将设置嵌入在 HTML 页中控件的属性之前,Internet Explorer IObjectSafety 查询该控件。如果支持,Internet Explorer 然后 SetInterfaceSafetyOptions 方法对调用此接口,传递值 INTERFACESAFE_FOR_UNTRUSTED_DATA 以及持久性接口的接口标识符 (IID)。在 HTML 页今天,位置属性倾向于初始化通过 <param>标记,IID 是 IID_IPersistPropertyBag。IID 原样的情况下,您可能希望是保护某些接口上,但不能在其他人,并在此示例中不重要的安全。 示例实现进行检查以确保支持该接口。 如果该控件可以执行操作的数据与它可能会通过该持久性界面进行初始化和持久性接口支持,而不考虑客户端的系统不会造成损害的控件的实现,IObjectSafety::SetInterfaceSafetyOptions 方法应返回 S_OK。否则,应返回 E_FAIL。

允许在运行页中嵌入的任何脚本之前, Internet Explorer 同样通过调用控件的 IObjectSafety:: SetInterfaceSafetyOptions 方法而是将值传递,但 INTERFACESAFE_FOR_UNTRUSTED_CALLER 和 IID 的一些脚本编写界面,这通常是 IID_IDispatch。控件应适当地返回 S_OK 或 E_FAIL。

如果控件不支持 IObjectSafety,Internet Explorer 查看如果该控件实现"可安全初始化"类别、 CATID_SafeForInitializing,和"可安全执行脚本"类别 CATID_SafeForScripting,分别使用组件类别管理器。

如果控件不支持 IObjectSafety 和尚未注册其自身作为实施相应的组件类别,并在 Internet Explorer 安全级别设置为高默认的 Internet Explorer 将不能初始化,该控件的属性,也不会执行任何在页中嵌入的脚本。在这种情况下最终用户会收到一个对话框,通过该对话框包含以下文本:
避免潜在的安全违反
此页包含不是可验证为安全地显示的活动内容。若要保护您的计算机,将不显示此内容。
以下是指导原则,取自 Paul 约翰文章的列表"签名和标记 ActiveX 控件:"
  • 该控件不会处理文件系统。
  • 该控件不会处理注册表 (除了注册和注销本身)。
  • 该控件不 overindex 数组或其他方式操作内存不正确。
  • 该控件验证 (和更正) 包括初始化、 方法参数和属性集函数的所有输入。
  • 该控件不会误用的由用户提供或有关该用户是任何数据。
  • 在各种方案中测试该控件。
有关更多的信息,请访问下面的 Microsoft 网站:
签名和标记 ActiveX 控件
http://msdn2.microsoft.com/en-us/library/ms974305.aspx
如果控件作者已经过验证除了可以将它们的其他任何满足上述条件,他们应考虑支持这两个 IObjectSafety 和为实现相应的组件类别中注册其控件。有关每种方法的优缺点的列表,查看相应部分中的,Paul 约翰文章签名和标记 ActiveX 控件。

若要编译

生成该示例要求 Microsoft Visual c + + 5.0 或 Microsoft Visual c + + 6.0。从存档提取文件后,到 Microsoft 开发人员 Studio,加载 Safectl.mdp 的项目,并生成项目。作为生成过程的控件应注册其自身。

警告通过此部分中稍后使用列出的两个预处理器符号修改此示例之前,必须先注销该控件,如果它已被生成或在计算机上注册。若要执行此操作运行 与/u 开关为您的控件的 Regsvr32.exe。您还可以将执行此操作为当前项目的开发人员 Studio 中添加一个自定义工具项。在 工具 菜单上单击 自定义,然后单击 工具 选项卡,创建一个新的项包含了以下信息:
                Name: &Un-register ActiveX Control
             Command: e:\Program Files\DevStudio\SharedIDE\BIN\REGSVR32.EXE
           Arguments: /u /v "$(TargetPath)"
   Initial Directory: $(TargetDir)
				
在此点,您可以使用"工具/取消-寄存器 ActiveX 控件"项之前添加或删除特定于示例的预处理器定义注销您的控件。

若要生成该控件,以便它本身注册为实现此"可安全执行初始化",并在"可安全执行脚本"组件类别,请按照下列步骤:
  1. 项目 菜单上单击 设置
  2. 单击 c + + 选项卡,然后定义下面的预处理器定义:
    L_USE_COMCAT
  3. 单击 确定 以关闭 设置 对话框,然后重新生成该控件。
若要生成控件,以便它而实现 IObjectSafety,请按照上面的步骤,但 L_USE_COMCAT 替换 L_IMPL_OBJECTSAFETY。

它也是有效定义这两个预处理器符号。观察这些符号是特定于此项目。默认状态下,该项目的生成设置定义这两个预处理器符号。

若要运行

该示例控件已生成,并已成功注册之后,启动 Internet Explorer,然后打开样本中包含 Safectl.htm 页。

如果控件已被配置为自身注册为安全或实现 IObjectSafety,控件标题应阅读"可安全初始化 !单击控件,时您应收到以下消息:
我必须为可安全执行脚本 !
如果 Internet Explorer 设置为其最高的安全设置,关联的脚本不会运行,并且您收到以下消息:
不安全初始化!


注意如果您是生成并测试此的示例的不同配置请确保在刷新 Web 页在浏览器中。如果不刷新页,您可能正在使用该控件的缓存的版本而不是最新生成。

参考

有关安全 api 的详细信息,请参阅该安全 API 参考 ActiveX SDK 联机文档中的。

有关代码签名的详细信息,请参阅 ActiveX SDK 联机文档中的"签名与 Microsoft 验证码技术"。

有关组件类别的详细信息,请参阅"组件类别"主题 ActiveX SDK 联机文档中。

有关如何实现组件对象模型 (COM) 接口在 MFC 中,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
141277如何通过使用 Visual c + + 中重写 MFC 应用程序中的接口
有关如何开发一个 ActiveX 控件以及如何将其部署在 Web 上的详细信息请访问下面的 Microsoft 网站:
MFC ActiveX 控件的 ABCs
http://msdn.microsoft.com/en-us/library/ms968497.aspx

属性

文章编号: 164119 - 最后修改: 2007年4月26日 - 修订: 5.4
这篇文章中的信息适用于:
  • Microsoft Internet Explorer 4.01 Service Pack 2
  • Microsoft Internet Explorer 3.0
  • Microsoft Internet Explorer 4.0 128-Bit Edition
  • Microsoft Internet Explorer 5.0
  • Microsoft Internet Explorer 6.0
  • Microsoft Visual C++ 5.0 企业版
  • Microsoft Visual C++ 5.0 专业版
  • Microsoft Visual C++ 6.0 企业版
  • Microsoft Visual C++ 6.0 专业版
关键字:?
kbmt kbdownload kbfile kbinfo kbsample KB164119 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 164119
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com