我在C#中编写了一个ActiveX控件,并使用regasm命令使其工作,只要安全级别设置为低,它就可以正常工作。然后作为下一步,我制作了一个.cab安装程序(ICD) - Internet组件下载程序),并使用测试证书签署了我的.cab文件和ActiveX .dll文件。当我从浏览器点击html页面时,安装部件可以正常使用IE的默认安全设置,但最后似乎没有安装任何东西,并且在ActiveX的位置显示红叉。此外,我已经探索了Windows目录下的“下载程序文件”文件夹,在状态栏中显示了“未知”字样。而它是为所有其他activeX“安装”的。可能是什么问题。
此外,如果我使用regasm命令注册程序集它工作正常,我已经签署了ActiveX但我仍然需要在我的浏览器设置中将安全栏移动到低?为什么会这样?然后签署的目的是什么?我在.inf文件中使用了RegisterServer=yes
如果有人已经解决了这个问题,请告诉我吗?
答案 0 :(得分:3)
为了在IE中运行,您还需要实现IObjectSafety,以便IE知道不受信任的调用者和/或不受信任的数据调用它是安全的。 (如果它实际上是安全的,那就是)
就我个人而言,我只在C ++& ATL,而不是C#,但这里有一篇博客文章看起来应该可以帮助你在C#中实现这一目标。
原因是恶意个人的脚本可能会使用您的对象绕过IE提供的正常安全性,因此您的ActiveX对象必须防御不受信任的页面本身。
当您在驾驶室签名时,您告诉用户他们正在下载的驾驶室是他们认为正在下载的驾驶室 - 即某些恶意个人没有将驾驶室更换为危险驾驶室。如果他们信任您作为发布者,那么他们可以相信ActiveXObject本身不会做任何恶意,或者与他们信任的其他代码结合使用。
实施IObjectSafety时,返回INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA,您告诉IE该对象不能被其他任何人恶意使用,因此可以安全地与用户未明确信任的代码一起运行。
答案 1 :(得分:1)
对我来说,上面的解决方案不起作用。 我还需要注册tlb
with:regasm MyDll.DLL / tlb