1

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

请让我知道,如果有人已经经历过这个问题?

4

2 回答 2

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 该对象不能被其他任何人恶意使用,因此可以安全地与用户不明确信任的代码一起运行。

于 2009-10-29T16:38:27.910 回答
1

对我来说,上面的解决方案不起作用。我还需要注册 tlb

与:regasm MyDll.DLL /tlb

于 2012-01-05T09:55:02.370 回答