2009-10-29 37 views
1

我已经写在C#中的ActiveX控件,并取得了它的工作使用regasm命令默认安全设置下正常工作,只要将安全级别设置为低时它工作得很好。那么作为下一步我已经制作了一个.cab安装程序(ICD - Internet组件下载程序),并使用测试证书对我的.cab文件和ActiveX .dll文件进行了签名。当我从浏览器中打开html页面时,安装部分可以正常使用IE的默认安全设置,但最终似乎没有安装任何东西,并且在ActiveX的位置显示红叉。此外,我已探索Windows目录下的“下载程序文件”文件夹,状态栏中显示“未知”字样。而对所有其他activeX“安装”。可能是什么问题。 此外,如果我使用regasm命令来注册程序集,它工作正常,并且我已经签名了ActiveX,但是仍然必须将安全栏移到我的浏览器设置的低位?为什么是这样?那么签名的目的是什么?我在.inf文件中使用RegisterServer=yes的ActiveX不

请让我知道,如果有一个人已经通过这个问题已经去了?

+0

,你看你期待什么?如果您一直在测试,您可能在子目录中有多个版本的控件。尝试删除所有这些并进行干净的下载/安装。 – 2009-10-29 16:17:43

+0

yes下载了组件的名称..组件的名称是我的activeX控件的CLSID,状态未知,当我使用regasm命令手动注册程序集时,它更改了我的控件在下载程序文件中的名称,从CLSID更改为我为我的ActiveX使用的强名键,但仍然不起作用?我已经尝试清理后的文件夹.. – 2009-10-29 16:21:37

回答

3

为了在IE运行,你还需要实现IObjectSafety的,使IE浏览器知道它是安全的由不可信的呼叫者和/或不可信数据调用。 (如果它实际上是安全的,那是)

个人而言,我只在C++ & ATL上做过,而不是C#,但是这里有一篇博文,看起来应该可以帮助你在C#中实现这一点。

http://blog.devstone.com/aaron/2007/06/12/ImplementingIObjectSafetyInNETMarkingClassesSafeForScripting.aspx

这样做的原因是,通过恶意脚本的个人可以使用您的对象来绕过IE浏览器提供的正常的安全,让您的ActiveX对象必须抵御不受信任的网页本身。

当您注册一个驾驶室,你告诉他们正在下载的驾驶室,他们认为他们下载一个用户 - 即一些怀有恶意的个体尚未与一个危险的更换你的出租车。如果他们信任你作为发布者,那么他们可以相信ActiveXObject不会做任何邪恶的事情,或者与他们信任的其他代码结合使用。

当你实现IObjectSafety的,返回INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA,你告诉IE,该对象不能被其他人恶意使用,因此可以安全地与用户不明确信任的代码一起运行。

+0

然后什么是签署我的ActiveX的目的?我已经用x509证书签名了,当我右键点击我的activeX dll文件然后属性时,它显示我的数字签名 – 2009-10-29 17:04:30

+1

你可以签名你的ActiveX,它表明它是你的,但你不能相信网页或安装后调用ActiveX的脚本。 在Intranet上,您可能有一个“危险”对象,它可以读取和写入磁盘,或将潜在的机密信息发送给服务器。应该对其进行签名,但只应在对象由受信任区域中的页面调用时才能使用,就像您目前所做的一样。 在大型的互联网上,你可以使用一个ActiveX对象来实现一个只做用户告诉它的小部件。这是安全的,必须用IObjectSafety标记。 – 2009-10-29 17:22:30

+0

所以你的意思是,随着数字签名,我需要实现接口呢?我对吗?而且我可以在不改变安全设置的情况下在我的网页中使用它?所以我需要两件东西 1)实施IObjectSafety 2)数字签名 纠正我,如果我错了吗? – 2009-10-29 17:34:38

1

对我来说,上述解决方案不起作用。 我需要同时注册TLB

用:如果您使用命令提示符去Downloaded Program Files文件regasm MYDLL.DLL/TLB